Claus Ibsen created CAMEL-24884:
-----------------------------------
Summary: camel-core - resolveResource option on expressions: a
returned resource:... value is loaded and its content is the result
Key: CAMEL-24884
URL: https://issues.apache.org/jira/browse/CAMEL-24884
Project: Camel
Issue Type: Improvement
Components: camel-core
Reporter: Claus Ibsen
Fix For: 4.23.0
The {{resource:}} prefix is resolved on the text of an expression ({{constant:
"resource:file:order.json"}}, {{simple: "resource:file:${...}"}}, {{groovy:
"resource:file:script.groovy"}}), never on a value an expression returns.
Choosing a file per message in any language but Simple therefore takes two
steps, a setHeader with the script and a setBody with {{simple:
"resource:file:${header.x}"}}; and a script that returns
{{'resource:file:order.json'}} hands the route that text, which is what the
local model did in the camel-jbang-mcp stepwise benchmark (CAMEL-24882).
Add an opt-in boolean {{resolveResource}} on the expression definition, so it
applies to every language: when true and the evaluated result is a String
starting with {{resource:}}, the expression resolves it through the same
ScriptHelper lookup the prefix uses today and returns the resource's content as
the result. Default false, so a body that happens to hold that text never
changes. The loaded content is the final value, not evaluated again.
{code}
- setBody:
expression:
groovy:
expression: "counter == 1 ? 'resource:file:order.json' :
'resource:file:order-bad-email.json'"
resolveResource: true
- setBody:
expression:
jq:
expression: "\"resource:classpath:templates/\" + .type + \".json\""
resolveResource: true
{code}
The second form is the general use: a template or a document chosen from the
message (resource:orderTemplate.json, resource:classpath:...). The validator
hint of CAMEL-24882 then offers this flag as the in-place fix next to
constant/simple. Schema, catalog and the DSLs pick the option up from the model.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)