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

Claus Ibsen updated CAMEL-25035:
--------------------------------
    Fix Version/s: 4.23.0

> variableReceive keeps the header variables of an earlier message when the 
> same variable receives again
> ------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25035
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25035
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>            Reporter: shashank
>            Priority: Minor
>             Fix For: 4.23.0
>
>
> With {{variableReceive}} ({{toV}}, {{enrich}}, {{pollEnrich}}, {{toD}}, 
> {{fromV}}, kamelets), {{ExchangeHelper.setVariableFromMessageBodyAndHeaders}} 
> stores the received body in the variable and each received header in a 
> variable named {{header:<variable>.<header>}}. It never removes the header 
> variables of a message received earlier into the same variable. When the 
> variable is reused (a second {{toV}} in the route, a loop, a retry, or a 
> {{global:}} variable across exchanges), a header that the new message does 
> not have keeps its old value, while the body is replaced, so the body and the 
> header variables come from different messages:
> {code:java}
> from("direct:caller")
>     .setBody(constant("first")).toV("direct:svc", null, "resp")    // reply 
> headers: error=E42, status=500
>     .setBody(constant("second")).toV("direct:svc", null, "resp");  // reply 
> headers: status=200
> // after the second reply: header:resp.status=200, header:resp.error=E42 
> (expected: no error header)
> {code}
> A check such as {{${variable.header:resp.error} != null}} then sees an error 
> the current reply does not have. The same happens for {{global:}}, {{route:}} 
> and {{group:}} variables; with {{global:}} a later exchange sees the headers 
> of an earlier one.
> A Lean model shows that without a fix every header missing from the new reply 
> keeps its old value, and that removing the {{header:<var>.}} variables before 
> storing the new ones gives exactly the new reply's headers while leaving 
> every other variable unchanged. A property-based test (jqwik) shrinks the 
> failure on main to a first reply with one header and a second reply with none.
> *Proposed fix:* before storing a new message, remove the header variables of 
> that variable (keys starting with {{header:<variable>.}}) in the exchange and 
> in any browsable variable repository (global, route, group), without changing 
> where or under which name the header variables are stored.
> Related (a separate change): for route and group variables the header 
> variables end up under a route (or group) named {{header}}, because the key 
> is built as {{header:<routeId>:<variable>.<header>}}, so they cannot be read 
> as {{route:header:resp.x}}.
> _Filed with Claude Code on behalf of allthingssecurity._



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

Reply via email to