You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/02/14 13:28:28 UTC
[camel] branch master updated: CAMEL-16205: camel-http - Optimize
extract response body for small payloads
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 9d252d8 CAMEL-16205: camel-http - Optimize extract response body for small payloads
9d252d8 is described below
commit 9d252d850adbc3cb198acb2125dfd814e2f2aded
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 14 14:06:46 2021 +0100
CAMEL-16205: camel-http - Optimize extract response body for small payloads
---
.../apache/camel/component/http/HttpProducer.java | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
index f4a7989..df4ba01 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
@@ -429,12 +429,22 @@ public class HttpProducer extends DefaultProducer {
}
} else {
if (!getEndpoint().isDisableStreamCache()) {
- // wrap the response in a stream cache so its re-readable
- InputStream response = null;
- if (!ignoreResponseBody) {
- response = doExtractResponseBodyAsStream(is, exchange);
+ if (ignoreResponseBody) {
+ // ignore response
+ return null;
+ }
+ long len = entity.getContentLength();
+ if (len > 0 && len < IOHelper.DEFAULT_BUFFER_SIZE) {
+ // optimize when we have content-length for small sizes to avoid creating streaming objects
+ int i = (int) len;
+ byte[] arr = new byte[i];
+ is.read(arr, 0, i);
+ IOHelper.close(is);
+ return arr;
+ } else {
+ // else for bigger payloads then wrap the response in a stream cache so its re-readable
+ return doExtractResponseBodyAsStream(is, exchange);
}
- return response;
} else {
// use the response stream as-is
return is;