[ 
https://issues.apache.org/jira/browse/CAMEL-25285?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-25285.
---------------------------------
    Fix Version/s: 4.23.0
       Resolution: Fixed

Fixed by https://github.com/apache/camel/pull/27300 (4c8a1ee4c6d9): unmarshal 
on a null body says the body is null, names the data format and points to 
allowNullBody. The marshal side is CAMEL-25284.

> marshal/unmarshal on a null message body: say the body is null
> --------------------------------------------------------------
>
>                 Key: CAMEL-25285
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25285
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Claus Ibsen
>            Priority: Minor
>             Fix For: 4.23.0
>
>
> *unmarshal* with a null message body fails, for any data format (checked with 
> json/Jackson and csv on 4.23.0-SNAPSHOT), with:
> {noformat}NoTypeConversionAvailableException: No type converter available to 
> convert from type: null to the required type: java.io.InputStream{noformat}
> The message names neither the data format nor the actual cause, which is that 
> the body is null. UnmarshalProcessor already has {{allowNullBody}} to skip a 
> null body, but the error does not mention it. Proposal: fail with a clear 
> message, for example:
> {noformat}Cannot unmarshal using json-jackson: the message body is null, so 
> there is nothing to unmarshal. Set the body first, or set allowNullBody=true 
> to skip a null body.{noformat}
> *marshal* with a null body never fails, and the result depends on the format:
> * json (Jackson): the 4-character string {{null}}
> * csv: an empty string
> * jacksonXml: {{<null/>}}
> A REST route that marshals a lookup result which came back null answers 200 
> with the body {{null}}. Since null is valid JSON this should not become an 
> error by default; CAMEL-25284 adds {{allowNullBody}} to marshal.
> Repro (YAML DSL):
> {code:yaml}
> - route:
>     from:
>       uri: timer:t
>       parameters: {repeatCount: 1}
>       steps:
>         - setBody: {simple: "${null}"}
>         - unmarshal:
>             json:
>               library: Jackson
> {code}
> Found while benchmarking a local model editing a route through 
> camel-jbang-mcp: the model replaced the step that loads a file into the body 
> with unmarshal, got the type converter message, did not recognize the cause, 
> and reported the change as done.
> Related: CAMEL-24844 (the validator follows the body type from step to step 
> and could flag an unmarshal with nothing to unmarshal before the route runs).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to