You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by el...@apache.org on 2009/10/25 13:37:40 UTC

svn commit: r829561 - in /incubator/wink/trunk: wink-client-apache-httpclient/src/main/java/org/apache/wink/client/internal/handlers/ wink-client/src/main/java/org/apache/wink/client/ wink-client/src/main/java/org/apache/wink/client/internal/handlers/

Author: elman
Date: Sun Oct 25 12:37:40 2009
New Revision: 829561

URL: http://svn.apache.org/viewvc?rev=829561&view=rev
Log:
Add consumeContent functionality. See [WINK-220]

Modified:
    incubator/wink/trunk/wink-client-apache-httpclient/src/main/java/org/apache/wink/client/internal/handlers/ApacheHttpClientConnectionHandler.java
    incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/ClientResponse.java
    incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/internal/handlers/ClientResponseImpl.java

Modified: incubator/wink/trunk/wink-client-apache-httpclient/src/main/java/org/apache/wink/client/internal/handlers/ApacheHttpClientConnectionHandler.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-client-apache-httpclient/src/main/java/org/apache/wink/client/internal/handlers/ApacheHttpClientConnectionHandler.java?rev=829561&r1=829560&r2=829561&view=diff
==============================================================================
--- incubator/wink/trunk/wink-client-apache-httpclient/src/main/java/org/apache/wink/client/internal/handlers/ApacheHttpClientConnectionHandler.java (original)
+++ incubator/wink/trunk/wink-client-apache-httpclient/src/main/java/org/apache/wink/client/internal/handlers/ApacheHttpClientConnectionHandler.java Sun Oct 25 12:37:40 2009
@@ -63,8 +63,9 @@
     }
 
     public ClientResponse handle(ClientRequest request, HandlerContext context) throws Exception {
+        HttpResponse response = null;
         try {
-            HttpResponse response = processRequest(request, context);
+            response = processRequest(request, context);
             return processResponse(request, context, response);
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -174,12 +175,25 @@
         return response;
     }
 
-    private ClientResponse createResponse(ClientRequest request, HttpResponse httpResponse) {
-        ClientResponse response = new ClientResponseImpl();
+    private ClientResponse createResponse(ClientRequest request, final HttpResponse httpResponse) {
+        final ClientResponseImpl response = new ClientResponseImpl();
         StatusLine statusLine = httpResponse.getStatusLine();
         response.setStatusCode(statusLine.getStatusCode());
         response.setMessage(statusLine.getReasonPhrase());
         response.getAttributes().putAll(request.getAttributes());
+        response.setContentConsumer(new Runnable() {
+            
+            public void run() {
+              HttpEntity entity = httpResponse.getEntity();
+              if (entity != null) {
+                  try {
+                    entity.consumeContent();
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+              }
+            }
+        });
         processResponseHeaders(response, httpResponse);
         return response;
     }

Modified: incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/ClientResponse.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/ClientResponse.java?rev=829561&r1=829560&r2=829561&view=diff
==============================================================================
--- incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/ClientResponse.java (original)
+++ incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/ClientResponse.java Sun Oct 25 12:37:40 2009
@@ -107,4 +107,15 @@
      * @param entity response entity to set
      */
     public void setEntity(Object entity);
+
+    /**
+     * Consumes entity content. The real behavior of this method depends on the
+     * actual implementation. It's needed to call this method, if the calling
+     * code decides not to handle content.
+     * <p>
+     * There is no need to call this method, if getEntity() was invoked.
+     * <p>
+     * Calling this method multiple times will not cause an error.
+     */
+    public void consumeContent();
 }

Modified: incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/internal/handlers/ClientResponseImpl.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/internal/handlers/ClientResponseImpl.java?rev=829561&r1=829560&r2=829561&view=diff
==============================================================================
--- incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/internal/handlers/ClientResponseImpl.java (original)
+++ incubator/wink/trunk/wink-client/src/main/java/org/apache/wink/client/internal/handlers/ClientResponseImpl.java Sun Oct 25 12:37:40 2009
@@ -39,9 +39,10 @@
 
 public class ClientResponseImpl extends BaseRequestResponseImpl implements ClientResponse {
 
-    private Object entity;
-    private String message;
-    private int    status;
+    private Object   entity;
+    private String   message;
+    private int      status;
+    private Runnable contentConsumer;
 
     public <T> T getEntity(Class<T> type) {
         return getEntity(type, type);
@@ -127,7 +128,22 @@
             throw new ClientRuntimeException(e);
         } finally {
             RuntimeContextTLS.setRuntimeContext(saved);
+            consumeContent();
         }
     }
 
+    public void consumeContent() {
+        if (contentConsumer != null) {
+            contentConsumer.run();
+        }
+    }
+
+    public void setContentConsumer(Runnable contentConsumer) {
+        this.contentConsumer = contentConsumer;
+    }
+
+    public Runnable getContentConsumer() {
+        return contentConsumer;
+    }
+
 }