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);
}
}