This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new a43b8fd82dc3 CAMEL-24698: camel-jbang - camel_eval_expression resolves
property placeholders (#26370)
a43b8fd82dc3 is described below
commit a43b8fd82dc38c1fc537640abab1025f21557f85
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Sep 13 16:46:52 2026 +0200
CAMEL-24698: camel-jbang - camel_eval_expression resolves property
placeholders (#26370)
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
Claude-Session: https://claude.ai/code/session_01Bp3538HRBPMQkb5ta9xRaj
Co-authored-by: Claude Fable 5.1 <[email protected]>
---
.../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");