better onresopnse / recv() support for gateway
authorBill Erickson <berick@esilibrary.com>
Thu, 15 Mar 2012 21:26:01 +0000 (17:26 -0400)
committerBill Erickson <berick@esilibrary.com>
Thu, 15 Mar 2012 21:26:01 +0000 (17:26 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
src/java/org/opensrf/net/http/GatewayRequest.java
src/java/org/opensrf/net/http/HttpRequest.java
src/java/org/opensrf/net/http/HttpRequestHandler.java

index bf9e071..00631bf 100644 (file)
@@ -13,7 +13,6 @@ import java.net.URI;
 import java.net.HttpURLConnection;
 import java.lang.StringBuffer;
 import java.util.List;
-import java.util.LinkedList;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.HashMap;
@@ -22,15 +21,16 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 
 public class GatewayRequest extends HttpRequest {
 
-    private List responseList;
+    private boolean readComplete;
 
     public GatewayRequest(HttpConnection conn, String service, Method method) {
         super(conn, service, method);
-        responseList = new LinkedList(); // TODO
+        readComplete = false;
     }
 
     public GatewayRequest send() {
         try {
+
             String postData = compilePostData(service, method);
 
             urlConn = (HttpURLConnection) httpConn.url.openConnection();
@@ -43,8 +43,9 @@ public class GatewayRequest extends HttpRequest {
             wr.flush();
             wr.close();
 
-        } catch (Exception ex) { // TODO inspect more closely
-            ex.printStackTrace(); 
+        } catch (java.io.IOException ex) {
+            failed = true;
+            failure = ex;
         }
 
         return this;
@@ -52,13 +53,13 @@ public class GatewayRequest extends HttpRequest {
 
     public Object recv() {
 
-        if (complete) return null;
-
-        Object payload = null;
-        StringBuffer readBuf = new StringBuffer();
+        if (readComplete) 
+            return nextResponse();
 
         try {
+
             InputStream netStream = new BufferedInputStream(urlConn.getInputStream());
+            StringBuffer readBuf = new StringBuffer();
 
             int bytesRead = 0;
             byte[] buffer = new byte[1024];
@@ -81,18 +82,20 @@ public class GatewayRequest extends HttpRequest {
 
             String status = result.get("status").toString(); 
             if (!"200".equals(status)) {
-                // throw exception
+                failed = true;
+                // failure = <some new exception>
             }
 
-            payload = result.get("payload"); 
-
+             // gateway always returns a wrapper array with the full results set
+             responseList = (List) result.get("payload"); 
 
-        } catch (Exception ex) { // TODO inspect more closely
-            ex.printStackTrace(); 
+        } catch (java.io.IOException ex) { 
+            failed = true;
+            failure = ex;
         }
 
-        complete = true;
-        return payload;
+        readComplete = true;
+        return nextResponse();
     }
 
     private String compilePostData(String service, Method method) {
index 3548af3..d91a127 100644 (file)
@@ -13,15 +13,20 @@ public abstract class HttpRequest {
     protected HttpURLConnection urlConn;
     protected HttpConnection httpConn;
     protected HttpRequestHandler handler;
-    private List<Object> responseList;
-    protected boolean complete = false;
+    protected List<Object> responseList;
+    protected Exception failure;
+    protected boolean failed;
+    protected boolean complete;
 
     public HttpRequest() {
+        failed = false;
+        complete = false;
+        handler = null;
+        urlConn = null;
     }
 
     public HttpRequest(HttpConnection conn, String service, Method method) {
-        this.handler = null;
-        this.urlConn = null;
+        this();
         this.httpConn = conn;
         this.service = service;
         this.method = method;
@@ -41,6 +46,17 @@ public abstract class HttpRequest {
     protected List responses() {
         return responseList;
     }
+    
+    protected Object nextResponse() {
+        if (complete || failed) return null;
+        if (responseList.size() > 0)
+            return responseList.remove(0);
+        return null;
+    }
+
+    public Exception getFailure() {
+        return failure;
+    }
 
     public abstract HttpRequest send();
 
index 8d8484d..9c0f9e5 100644 (file)
@@ -21,6 +21,5 @@ public abstract class HttpRequestHandler {
      * @param payload the value returned from the server.
      */
     public void onResponse(HttpRequest request, Object response) {
-        request.pushResponse(response);
     }
 }