When passing a request with a Content-Length header through a route with a
jetty consumer and producer, the producer is removing the Content-Length
header and replacing it with Transfer-Encoding: chunked.  The uri option
chunked appears to only be for jetty consumers and not for producers.  This
issue seems to stem from the following set of calls starting in
JettyHttpProducer ln 184 (camel-2.18.2):

httpExchange.setRequestContent(is)
  this.request.content(new InputStreamContentProvider(ins),
this.requestContentType)

With the content set as an InputStreamContentProvider, when the
content.getLength() is called in org.eclipse.jetty.client.HttpConnection ln
120, it is returned as -1.  This causes the "Transfer-Encoding: chunked"
header to be added at ln 129.  Again in the
org.eclipse.jetty.http.HttpGenerator class getLength() is called on the
InputStreamContentProvider and since it is -1, the Content-Length header is
not added to the request to be sent out.

I propose that the InputStreamContentProvider be subclassed and given a
value for its length as was done by the class
org.eclipse.jetty.proxy.ProxyServlet.ProxyInputStreamContentProvider.  This
subclass could then be used in the JettyHttpProducer, but only if the
Content-Length header exists.  This would allow subsequent calls to the
ContentProvider to return a positive value for getLength() and therefore
allow the Content-Length header to persist.  A prototype of this patch is
attached to the post.

jettyProducer.patch
<http://camel.465427.n5.nabble.com/file/n5795277/jettyProducer.patch>  
  



--
View this message in context: 
http://camel.465427.n5.nabble.com/Jetty-Producer-always-uses-Transfer-Encoding-chunked-tp5795277.html
Sent from the Camel Development mailing list archive at Nabble.com.

Reply via email to