From ac6415354270e8a7c5233690f697983f6665ee27 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Thu, 15 Mar 2012 17:26:01 -0400 Subject: [PATCH] better onresopnse / recv() support for gateway Signed-off-by: Bill Erickson --- src/java/org/opensrf/net/http/GatewayRequest.java | 35 ++++++++++++---------- src/java/org/opensrf/net/http/HttpRequest.java | 24 ++++++++++++--- .../org/opensrf/net/http/HttpRequestHandler.java | 1 - 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/java/org/opensrf/net/http/GatewayRequest.java b/src/java/org/opensrf/net/http/GatewayRequest.java index bf9e071..00631bf 100644 --- a/src/java/org/opensrf/net/http/GatewayRequest.java +++ b/src/java/org/opensrf/net/http/GatewayRequest.java @@ -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 = } - 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) { diff --git a/src/java/org/opensrf/net/http/HttpRequest.java b/src/java/org/opensrf/net/http/HttpRequest.java index 3548af3..d91a127 100644 --- a/src/java/org/opensrf/net/http/HttpRequest.java +++ b/src/java/org/opensrf/net/http/HttpRequest.java @@ -13,15 +13,20 @@ public abstract class HttpRequest { protected HttpURLConnection urlConn; protected HttpConnection httpConn; protected HttpRequestHandler handler; - private List responseList; - protected boolean complete = false; + protected List 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(); diff --git a/src/java/org/opensrf/net/http/HttpRequestHandler.java b/src/java/org/opensrf/net/http/HttpRequestHandler.java index 8d8484d..9c0f9e5 100644 --- a/src/java/org/opensrf/net/http/HttpRequestHandler.java +++ b/src/java/org/opensrf/net/http/HttpRequestHandler.java @@ -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); } } -- 2.11.0