Claus Ibsen created CAMEL-25860:
-----------------------------------
Summary: camel-core - pollEnrich: after a timeout, a message that
creates its body on demand (such as of a file consumer) brings its body back
instead of null
Key: CAMEL-25860
URL: https://issues.apache.org/jira/browse/CAMEL-25860
Project: Camel
Issue Type: Bug
Components: camel-core
Reporter: Claus Ibsen
Fix For: 4.24.0
When a pollEnrich (or poll) times out, the default aggregation sets the body to
null ({{PollEnricher.CopyAggregationStrategy}}), and with {{variableReceive}}
the variable gets that null body. In a route whose message creates its body on
demand, the null does not stick: {{MessageSupport.getBody()}} calls
{{createBody()}} for a null body, so the next read brings the original body
back.
The message of a file consumer ({{GenericFileMessage}}) creates its body from
its file, so after the timeout the body, or the variable of variableReceive, is
the file of the exchange instead of null:
{noformat}
from: file:orders
pollEnrich: file:customers?fileName=${header.customer}.json, timeout 1000
-> body (or ${variable.customer}) is .../orders/order-1001.json when there is
no customer file
{noformat}
The messages of other consumers create their body on demand as well: JMS, sjms,
mail, HTTP ({{HttpMessage}}), XMPP, SMPP, SNMP and Spring WS. For them, the
body is the payload of the consumer again.
Found in a benchmark of Oct 19-20 2026 (an enrich example with a pollEnrich of
a customer file): 5 of 12 runs got "Key: name not found in bean:
.../orders/order-1001.json of type: java.io.File" from
{{${variable.customer[name]}}}, and the model then looked for the cause
elsewhere.
Proposal: when the message brings a body back after setBody(null), the
aggregation uses a plain message with the same headers and attachments, so the
body stays null.
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)