Andrea Cosentino created CAMEL-25585:
----------------------------------------
Summary: camel-chunk - message body and header values are expanded
as Chunk template code instead of printed literally
Key: CAMEL-25585
URL: https://issues.apache.org/jira/browse/CAMEL-25585
Project: Camel
Issue Type: Improvement
Components: camel-chunk
Reporter: Andrea Cosentino
Assignee: Andrea Cosentino
h3. Description
When camel-chunk renders a template that outputs a message value, the Chunk
engine re-parses that value as template source and expands any Chunk tags
contained in it, instead of printing the value literally. For example a
template that prints the body:
{noformat}
This is the body {$body}
{noformat}
will, if the body itself contains Chunk markup, expand that markup rather than
output it verbatim.
The cause is that ChunkEndpoint populates the engine with Chunk.putAll(...) in
ChunkEndpoint.onExchange
(components/camel-chunk/src/main/java/org/apache/camel/component/chunk/ChunkEndpoint.java,
around line 123). In the Chunk API a value set this way is parsed for tags and
expanded; only Chunk.setLiteral(...) keeps a value literal. Camel never calls
setLiteral.
h3. Why this matters
This is inconsistent with Camel's other template components (camel-freemarker,
camel-velocity, camel-mustache), which substitute message data inertly: a body
or header whose content happens to look like template markup is printed
verbatim. In camel-chunk the same data is interpreted as template code.
h3. Steps to reproduce
Template themes/nested.chtml:
{noformat}
This is the body {$body}
{noformat}
Route:
{noformat}
from("direct:a").to("chunk://nested");
{noformat}
Send a message with header name=World and body:
{noformat}
{$headers.name}
{noformat}
h3. Expected
{noformat}
This is the body {$headers.name}
{noformat}
(the body printed literally)
h3. Actual
{noformat}
This is the body World
{noformat}
(the body is re-parsed and the inner tag expanded)
h3. Proposed fix
Bind message data into the Chunk engine so values are treated literally (for
example, use setLiteral for String values), so that only the route author's
template file is parsed as template code. Add a regression test. While in this
code, review the reuse of a single cached Chunk instance across exchanges.
h3. Affected
components/camel-chunk - main, camel-4.22.x, camel-4.18.x.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)