CAMEL-9768: Close the stream either now or later depending on that disable stream cache option. This closes #932.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cef2609c Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cef2609c Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cef2609c Branch: refs/heads/camel-2.17.x Commit: cef2609c5bdc99fad174618861eac304dd4052da Parents: fbf5bcf Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Apr 7 10:42:18 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Apr 7 10:42:44 2016 +0200 ---------------------------------------------------------------------- .../camel/component/http4/HttpProducer.java | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/cef2609c/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java index 4edc6c5..c59c3b8 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java @@ -43,6 +43,7 @@ import org.apache.camel.http.common.HttpOperationFailedException; import org.apache.camel.http.common.HttpProtocolHeaderFilterStrategy; import org.apache.camel.impl.DefaultProducer; import org.apache.camel.spi.HeaderFilterStrategy; +import org.apache.camel.support.SynchronizationAdapter; import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.GZIPHelper; import org.apache.camel.util.IOHelper; @@ -179,11 +180,25 @@ public class HttpProducer extends DefaultProducer { } } } finally { - if (httpResponse != null && !getEndpoint().isDisableStreamCache()) { + final HttpResponse response = httpResponse; + if (httpResponse != null && getEndpoint().isDisableStreamCache()) { + // close the stream at the end of the exchange to ensure it gets eventually closed later + exchange.addOnCompletion(new SynchronizationAdapter() { + @Override + public void onDone(Exchange exchange) { + try { + EntityUtils.consume(response.getEntity()); + } catch (Throwable e) { + // ignore + } + } + }); + } else if (httpResponse != null) { + // close the stream now try { - EntityUtils.consume(httpResponse.getEntity()); - } catch (IOException e) { - // nothing we could do + EntityUtils.consume(response.getEntity()); + } catch (Throwable e) { + // ignore } } }