[
https://issues.apache.org/jira/browse/CAMEL-26138?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen reassigned CAMEL-26138:
-----------------------------------
Assignee: Claus Ibsen
> camel-http-common - with chunked=true a Map, List, POJO or number reply is a
> 200 with an empty body, and mapHttpMessageBody=false still maps the body
> (jetty, servlet)
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26138
> URL: https://issues.apache.org/jira/browse/CAMEL-26138
> Project: Camel
> Issue Type: Bug
> Components: camel-http-common
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of jetty and servlet, which share
> {{DefaultHttpBinding}} and {{HttpMessage}} of camel-http-common (CAMEL-24961,
> PR #28395).
> h4. 1. With chunked=true (the default) a Map, List, POJO or number reply is a
> 200 with an empty body
> {{DefaultHttpBinding.doWriteDirectResponse}} (main 2a465aa4814c, line 539)
> takes {{message.getBody(InputStream.class)}} when the response is chunked.
> For a Map, List, POJO or number this gives no data (the request stream,
> already read), so the response is a 200 with an empty body and no error. With
> {{chunked=false}} the same bodies are written as their String form (line
> 593). Checked on 4.24.0-SNAPSHOT with a java.net.http client against jetty
> and servlet consumers (servlet in the Undertow servlet container).
> Proposed: when the body is not a stream or bytes, use the same String
> fallback as the non-chunked path.
> h4. 2. mapHttpMessageBody=false still maps the request body
> {{DefaultHttpBinding.readRequest}} (line 125) skips {{readBody}} when
> {{mapHttpMessageBody=false}}, but {{HttpMessage.createBody}} (line 98) reads
> the body lazily with {{parseBody}} whenever the route asks for it, so the
> option has no effect on the body the route sees. Checked on 4.24.0-SNAPSHOT
> with jetty and servlet consumers.
> Proposed: return null from {{HttpMessage.createBody}} when the binding has
> {{mapHttpMessageBody=false}}.
> h4. 3. With disableStreamCache=true a form POST loses its body
> {{DefaultHttpBinding.readFormUrlEncodedBody}} (line 294) reads the body as a
> String to map the form fields to headers. With {{disableStreamCache=true}}
> the body is the raw request stream, so it is consumed: servlet then fails
> with 500 "UT010029: Stream is closed" and jetty gives the route an empty
> body. Checked on 4.24.0-SNAPSHOT with jetty and servlet consumers.
> Proposed: with {{disableStreamCache=true}}, keep the read text as the body
> (or take the form fields from {{request.getParameterMap()}}).
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)