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;