From 41cd808b813d0919dea28c31851c1eb056310e82 Mon Sep 17 00:00:00 2001 From: Kevin Earls Date: Tue, 10 Jan 2017 09:56:40 +0100 Subject: [PATCH] CAMEL-10577 replace BufferingResponseListener with InputStreamResponseListener to avoid hardcoded 2MB limit --- .../jetty9/JettyContentExchange9.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java index f7cba4a0615e1..07300533e2962 100644 --- a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java +++ b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyContentExchange9.java @@ -16,12 +16,14 @@ */ package org.apache.camel.component.jetty9; +import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import java.net.MalformedURLException; +import java.nio.ByteBuffer; import java.util.Collection; import java.util.Map; import java.util.TreeMap; @@ -29,6 +31,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import static javax.servlet.http.HttpServletResponse.SC_OK; + import org.apache.camel.AsyncCallback; import org.apache.camel.CamelExchangeException; import org.apache.camel.Exchange; @@ -39,14 +43,16 @@ import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.client.api.Result; -import org.eclipse.jetty.client.util.BufferingResponseListener; import org.eclipse.jetty.client.util.BytesContentProvider; import org.eclipse.jetty.client.util.InputStreamContentProvider; +import org.eclipse.jetty.client.util.InputStreamResponseListener; import org.eclipse.jetty.client.util.StringContentProvider; import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.util.Callback; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + /** * Jetty specific exchange which keeps track of the the request and response. */ @@ -214,14 +220,28 @@ public void onFailure(Request request, Throwable failure) { } }; - BufferingResponseListener responseListener = new BufferingResponseListener() { + + InputStreamResponseListener responseListener = new InputStreamResponseListener() { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + @Override + public void onContent(Response response, ByteBuffer content, Callback callback) { + if (response.getStatus() != SC_OK) { + LOG.warn("Response received {}: {}", response.getStatus(), response.getReason()); + } + byte[] buffer = new byte[content.limit()]; + content.get(buffer); + baos.write(buffer, 0, buffer.length); + + callback.succeeded(); + } @Override public void onComplete(Result result) { if (result.isFailed()) { doTaskCompleted(result.getFailure()); } else { - onResponseComplete(result, getContent(), getMediaType()); + onResponseComplete(result, baos.toByteArray(), null); } } };