This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch pr/CAMEL-24698-eval-placeholders in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4c631efe002be6259468260aaaa31d1220cc045a Author: Claus Ibsen <[email protected]> AuthorDate: Sun Sep 13 15:09:08 2026 +0200 CAMEL-24698: camel-jbang - camel_eval_expression resolves property placeholders Squash of the 1 commits on fix/CAMEL-24698-eval-placeholders (the run-by-run history is on bench/after-run). camel-console - eval-language resolves property placeholders before evaluating, as the route loaders do Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01Bp3538HRBPMQkb5ta9xRaj --- .../camel/impl/console/EvalLanguageDevConsole.java | 13 +++++++++++ .../impl/console/EvalLanguageDevConsoleTest.java | 27 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java b/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java index 0814e6e4eeaf..3effec949507 100644 --- a/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java +++ b/core/camel-console/src/main/java/org/apache/camel/impl/console/EvalLanguageDevConsole.java @@ -85,6 +85,7 @@ public class EvalLanguageDevConsole extends AbstractDevConsole { String out; boolean predicate = optionBoolean(options, PREDICATE, false); + template = resolvePlaceholders(template); if (predicate) { Predicate pre = getCamelContext().resolveLanguage(language).createPredicate(template); out = pre.matches(dummy) ? "true" : "false"; @@ -99,6 +100,17 @@ public class EvalLanguageDevConsole extends AbstractDevConsole { return sb.toString(); } + /** + * Resolves property placeholders in the template first, as the route loaders do before a language parses the text, + * so that {{myPeriod}} or ${body} > {{myThreshold}} evaluate as they would in a route (CAMEL-24698). + */ + private String resolvePlaceholders(String template) { + if (template != null && template.contains("{{")) { + return getCamelContext().resolvePropertyPlaceholders(template); + } + return template; + } + @Override protected Map<String, Object> doCallJson(Map<String, Object> options) { String language = optionString(options, LANGUAGE); @@ -127,6 +139,7 @@ public class EvalLanguageDevConsole extends AbstractDevConsole { String out = null; try { boolean predicate = optionBoolean(options, PREDICATE, false); + template = resolvePlaceholders(template); if (predicate) { Predicate pre = getCamelContext().resolveLanguage(language).createPredicate(template); out = pre.matches(dummy) ? "true" : "false"; diff --git a/core/camel-console/src/test/java/org/apache/camel/impl/console/EvalLanguageDevConsoleTest.java b/core/camel-console/src/test/java/org/apache/camel/impl/console/EvalLanguageDevConsoleTest.java index 59e16c302000..9e2c4e881aff 100644 --- a/core/camel-console/src/test/java/org/apache/camel/impl/console/EvalLanguageDevConsoleTest.java +++ b/core/camel-console/src/test/java/org/apache/camel/impl/console/EvalLanguageDevConsoleTest.java @@ -73,6 +73,33 @@ public class EvalLanguageDevConsoleTest extends AbstractDevConsoleTest { Assertions.assertEquals("bar", out.getString("result")); } + @Test + public void testEvalResolvesPropertyPlaceholders() { + DevConsole con = assertConsoleExists("eval-language", "camel"); + context.getPropertiesComponent().addInitialProperty("myThreshold", "30"); + + JsonObject out = callJson(con, Map.of( + "language", "simple", + "template", "{{myThreshold}}", + "body", "")); + Assertions.assertEquals("success", out.getString("status")); + Assertions.assertEquals("30", out.getString("result")); + + out = callJson(con, Map.of( + "language", "simple", + "template", "${body} >= {{myThreshold}}", + "predicate", "true", + "body", "42")); + Assertions.assertEquals("success", out.getString("status")); + Assertions.assertEquals("true", out.getString("result")); + + out = callJson(con, Map.of( + "language", "simple", + "template", "{{unknownKey}}", + "body", "")); + Assertions.assertEquals("failed", out.getString("status")); + } + @Test public void testEvalPredicate() { DevConsole con = assertConsoleExists("eval-language", "camel");
