You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2009/03/11 11:29:36 UTC

svn commit: r752418 - /camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java

Author: ningjiang
Date: Wed Mar 11 10:29:36 2009
New Revision: 752418

URL: http://svn.apache.org/viewvc?rev=752418&view=rev
Log:
CAMEL-1445 http producer will return a cached stream

Modified:
    camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java

Modified: camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java?rev=752418&r1=752417&r2=752418&view=diff
==============================================================================
--- camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java (original)
+++ camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java Wed Mar 11 10:29:36 2009
@@ -26,6 +26,7 @@
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.http.helper.GZIPHelper;
 import org.apache.camel.component.http.helper.LoadingByteArrayOutputStream;
+import org.apache.camel.converter.stream.CachedOutputStream;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.util.ObjectHelper;
@@ -79,7 +80,7 @@
 
                 answer.setHeaders(in.getHeaders());
                 answer.setHeader(HttpConstants.HTTP_RESPONSE_CODE, responseCode);
-                answer.setBody(extractResponseBody(method));
+                answer.setBody(extractResponseBody(method, exchange));
 
                 // propagate HTTP response headers
                 Header[] headers = method.getResponseHeaders();
@@ -93,7 +94,7 @@
             } else {
                 HttpOperationFailedException exception = null;
                 Header[] headers = method.getResponseHeaders();
-                InputStream is = extractResponseBody(method);
+                InputStream is = extractResponseBody(method, exchange);
                 if (responseCode >= 300 && responseCode < 400) {
                     String redirectLocation;
                     Header locationHeader = method.getResponseHeader("location");
@@ -137,22 +138,21 @@
      * @return  the response as a stream
      * @throws IOException can be thrown
      */
-    protected static InputStream extractResponseBody(HttpMethod method) throws IOException {
-        LoadingByteArrayOutputStream bos = null;
+    protected static InputStream extractResponseBody(HttpMethod method, Exchange exchange) throws IOException {
+        CachedOutputStream cos = null;
         InputStream is = null;
         try {
-            bos = new LoadingByteArrayOutputStream();
+            cos = new CachedOutputStream(exchange.getContext().getProperties());
             is = GZIPHelper.getInputStream(method);            
             // in case of no response stream
             if (is == null) {
                 return null;
             }
-            IOUtils.copy(is, bos);
-            bos.flush();
-            return bos.createInputStream();
+            IOUtils.copy(is, cos);
+            cos.flush();
+            return cos.getInputStream();
         } finally {
-            ObjectHelper.close(is, "Extracting response body", LOG);
-            ObjectHelper.close(bos, "Extracting response body", LOG);
+            ObjectHelper.close(is, "Extracting response body", LOG);            
         }
     }