[
https://issues.apache.org/jira/browse/CAMEL-25923?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18129765#comment-18129765
]
Seshu Thota commented on CAMEL-25923:
-------------------------------------
I'd like to work on this. I have a fix and tests ready on a branch (the
null-body path now copies the in message to the out message, so the headers are
kept). My JIRA account is new and can't assign issues yet. Could a committer
assign it to me, or add me as a contributor?
> camel-core - unmarshal with allowNullBody drops the message headers when the
> body is null
> -----------------------------------------------------------------------------------------
>
> Key: CAMEL-25923
> URL: https://issues.apache.org/jira/browse/CAMEL-25923
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Affects Versions: 4.18.0, 4.22.0, 4.23.0
> Reporter: Claus Ibsen
> Priority: Minor
> Fix For: 4.24.0
>
>
> With {{allowNullBody=true}}, unmarshal skips the data format for a null body,
> as CAMEL-17720 added. It also drops the headers of the message:
> {code:yaml}
> - route:
> from:
> uri: timer:tick
> parameters:
> repeatCount: 1
> steps:
> - setHeader:
> name: orderId
> constant: "42"
> - unmarshal:
> allowNullBody: true
> json: {}
> - log: "orderId=${header.orderId}"
> {code}
> After the unmarshal, {{orderId}} is empty. The same steps with {{marshal}}
> instead keep it (marshal has {{allowNullBody}} since CAMEL-25284). Checked on
> 4.24.0-SNAPSHOT.
> *Cause*: for a null body, {{UnmarshalProcessor}} takes the out message
> without copying the in message into it (camel-support,
> {{UnmarshalProcessor.java:84-86}} on main):
> {code:java}
> if (allowNullBody && body == null) {
> // The body is null, and it is an allowed value so let's skip the
> unmarshalling
> out = exchange.getOut();
> } else {
> // lets set up the out message before we invoke the dataFormat so that it
> can mutate it if necessary
> out = exchange.getOut();
> out.copyFrom(in);
> {code}
> {{getOut()}} creates an empty message, which then takes the place of the in
> message, so its headers are gone. {{MarshalProcessor}} returns early for a
> null body and leaves the message as it is.
> {{UnmarshalProcessorTest.testAllowNullBody}} checks only the body and the
> exception.
> *Proposed change*: for a null body, leave the message as it is, as marshal
> does (with {{variableReceive}}, set that variable to null), and check the
> headers in the test.
> Since Camel 3.16 (CAMEL-17720); in 4.18.0, 4.22.0 and 4.23.0.
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)