[
https://issues.apache.org/jira/browse/CAMEL-10380?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrea Cosentino resolved CAMEL-10380.
--------------------------------------
Resolution: Fixed
> JettyHttpEndpoint9 ignores eagerCheckContentAvailable so Jetty builds a
> reuqest with "Transfer-Encoding: chunked"
> -----------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-10380
> URL: https://issues.apache.org/jira/browse/CAMEL-10380
> Project: Camel
> Issue Type: Bug
> Components: camel-jetty
> Affects Versions: 2.17.3
> Reporter: Rudolf Batt
> Assignee: Andrea Cosentino
> Priority: Minor
> Fix For: 2.17.4, 2.18.1, 2.19.0
>
>
> My original problem is the fact, that in a Jetty based proxy the consumer
> sets the header "Transfer-Encoding: chunked" to the backend request for a GET
> request without body. This is not necessary, since there is no body, but the
> http component puts that null body into a InputStreamCache/HttpInputOverHTTP.
> This happens, because there is no content-length header set (which means it's
> "-1"):
> see
> https://github.com/apache/camel/blob/master/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java#L564
> The only workaround I found, is to set "eagerCheckContentAvailable=true".
> Unfortunately the JettyHttpEndpoint9 does not transfer this setting to the
> http binding and therefor my problem can't be fixed. (Ok, I found another
> workaround, but it's really ugly.)
> I found that problem using camel-2.17. In the current master branch, there is
> an open TODO to transfer this option:
> https://github.com/apache/camel/blame/master/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpEndpoint9.java#L52
> For me this fixed the problem in my "test".
> I didn't manage to build a good test, since that header is set deeply inside
> "org.eclipse.jetty.client.HttpConnection.normalizeRequest(Request)", but it's
> easy to reproduce it, by running a simple proxy and enable DEBUG log for
> "org.eclipse.jetty.client.HttpSender":
> Inside the log a http header like will be logged:
> {noformat}
> Accept-Encoding: gzip
> User-Agent: Jetty/9.2.15.v20160210
> sendDirect: true
> Host: 127.0.0.1
> Transfer-Encoding: chunked
> {noformat}
> This is the test I used to reproduce and debug that problen
> {code}
> public class JettyEndpointsChuckedFalseTest extends BaseJettyTest {
>
> @Test
> public void runningTest() throws Exception {
> Exchange exchange =
> template.request("http://localhost:{{port}}/test", new Processor() {
> @Override
> public void process(Exchange exchange) throws Exception {
> exchange.getIn().getBody();
> }
> });
> assertNotNull(exchange);
> }
>
> @Override
> protected RouteBuilder createRouteBuilder() throws Exception {
> return new RouteBuilder() {
> @Override
> public void configure() throws Exception {
>
> from("jetty:http://localhost:{{port}}/test?matchOnUriPrefix=true&chunked=false&disableStreamCache=true"
> + "&eagerCheckContentAvailable=true")
>
> .to("log:request-debug?showHeaders=true&showBody=false&level=INFO")
>
> .to("jetty:http://localhost:{{port2}}/test?bridgeEndpoint=true&chunked=false");
>
> from("jetty:http://localhost:{{port2}}/test")
> .to("mock:dead.end");
> }
> };
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)