[ https://issues.apache.org/jira/browse/CAMEL-13886?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tadayoshi Sato updated CAMEL-13886: ----------------------------------- Fix Version/s: 2.25.0 > camel-servlet + camel-http4 with null body causes "Stream closed" IOException > ----------------------------------------------------------------------------- > > Key: CAMEL-13886 > URL: https://issues.apache.org/jira/browse/CAMEL-13886 > Project: Camel > Issue Type: Bug > Components: camel-http-common, camel-http4, camel-servlet > Affects Versions: 2.25.0, 3.0.0.M4 > Reporter: Tadayoshi Sato > Assignee: Tadayoshi Sato > Priority: Major > Fix For: 2.25.0, 3.0.0.RC2 > > Time Spent: 20m > Remaining Estimate: 0h > > A Rest DSL route like the following causes {{java.io.IOException: Stream > closed}} when invoked at http://localhost:8000/test/proxy: > {code:java} > rest("/test") > .get("/proxy") > .to("direct:callInternalRestService"); > from("direct:callInternalRestService") > .setHeader(Exchange.HTTP_METHOD, constant("DELETE")) > //.setBody(constant("")) // workaround for null body and > http4 component > .to("http4://localhost:9000/test?bridgeEndpoint=true") > .log("${body}"); > {code} > The error stacktrace: > {code} > Caused by: java.io.IOException: Stream closed > at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:372) > at > org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:156) > at org.apache.camel.util.IOHelper.copy(IOHelper.java:202) > at org.apache.camel.util.IOHelper.copy(IOHelper.java:174) > at org.apache.camel.util.IOHelper.copyAndCloseInput(IOHelper.java:234) > at org.apache.camel.util.IOHelper.copyAndCloseInput(IOHelper.java:230) > at > org.apache.camel.http.common.HttpHelper.readResponseBodyFromInputStream(HttpHelper.java:245) > at > org.apache.camel.http.common.HttpHelper.readRequestBodyFromServletRequest(HttpHelper.java:196) > at > org.apache.camel.http.common.DefaultHttpBinding.parseBody(DefaultHttpBinding.java:577) > at > org.apache.camel.http.common.HttpMessage.createBody(HttpMessage.java:78) > ... 54 common frames omitted > {code} > -This seems to happen only when Tomcat is used as the container with Spring > Boot. Undertow doesn't cause such an issue.- > The real root cause is that when an exchange has an {{HttpMessage}} with > {{null}} body as its out message, then the next time > {{Exchange.getMessage()}} is invoked the {{HttpMessage}} is tricked by the > {{null}} body and tries to create body again with the already closed request > input stream. -- This message was sent by Atlassian Jira (v8.3.2#803003)