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 f294dff4c317 CAMEL-23047: camel-core - Add val function to simple
f294dff4c317 is described below
commit f294dff4c317c8618844eed3b160ac2a22620a34
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Feb 21 21:08:08 2026 +0100
CAMEL-23047: camel-core - Add val function to simple
---
.../modules/languages/pages/simple-language.adoc | 29 +++++++---------------
.../camel/language/simple/SimpleInitBlockTest.java | 16 ++++++++++++
2 files changed, 25 insertions(+), 20 deletions(-)
diff --git
a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
index 3d02ba4c3763..2fb5b93ba8d0 100644
---
a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
+++
b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
@@ -186,7 +186,7 @@ to access Camel functionality and content of the message
being routed.
|`stepId` | `String` | Returns the id of the current step the `Exchange` is
being routed. Returns `null` if there are no steps.
|`throwException(type,msg)` | `Exception` | Deliberately throws an error. Uses
`IllegalArgumentException` by default if no type is specified (use fully
qualified classname).
|`type:name.field` | `Object` | To refer to a type or field by its fully
qualified classname. For example: `type:org.apache.camel.Exchange.FILE_NAME`.
-|`val(exp)` | `Object` |
+|`val(exp)` | `Object` | Returns the expression as a constant value.
|`variable.key` | `Object` | To look up the variable with the given key.
|`variable.key._OGNL_` | `Object` | To look up the variable with the given key
and then invoke Camel _OGNL syntax_.
|`variable[key]` | `Object` | *Deprecated* To look up the variable with the
given key.
@@ -1179,39 +1179,28 @@ $init{
Notice how the block uses the `$init{` ... `}init$` markers to indicate the
start and end of the block.
-Inside the init block, then you can assign local variables in the syntax `$key
:= ...` where you can then use simple language to declare
+Inside the init block, then you can assign local variables in the syntax `$key
:= function` where you can then use simple language function(s) to compute
the value of the variable.
-In the example below the `foo` variable is assigned a constant value of `Hello
foo`, while `bar` variable is a string value with the dynamic value
-of the message body.
-
[source,text]
----
$init{
- $foo := 'Hello foo'
- $bar := 'Hi from ${body}'
+ $foo := ${upper('Hello $body}'}
+ $bar := ${header.code > 999 ? 'Gold' : 'Silver'}
}init$
----
-You can have Java style code comments in the init block using `// comment
here` as follows:
+IMPORTANT: The left hand side must be a function - you cannot assign a
hardcoded literal value. Use the `val` function for this, such as `${val(123)}`
to use `123` as the value.
-[source,text]
-----
-$init{
- // foo is a beginner phrase
- $foo := 'Hello foo'
-
- // here we can inline functions to get the name of the user from the message
body
- $bar := 'Hi from ${body}'
-}init$
-----
-
-Yes you can use the full power of the simple language and all its functions,
such as:
+You can have Java style code comments in the init block using `// comment
here` as follows:
[source,text]
----
$init{
+ // say hello to my friend
$foo := ${upper('Hello $body}'}
+
+ // either gold or silver
$bar := ${header.code > 999 ? 'Gold' : 'Silver'}
}init$
----
diff --git
a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleInitBlockTest.java
b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleInitBlockTest.java
index cae5757d4afd..65b0d2d06cb3 100644
---
a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleInitBlockTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleInitBlockTest.java
@@ -145,6 +145,22 @@ public class SimpleInitBlockTest extends
LanguageTestSupport {
assertEquals("average: 5\n", s);
}
+ @Test
+ public void testInitBlockConstant() {
+ String exp = """
+ $init{
+ $bar := ${val(Hi from ${body})}
+ }init$
+ $bar
+ """;
+
+ exchange.getMessage().setBody("Camel");
+
+ Expression expression =
context.resolveLanguage("simple").createExpression(exp);
+ String s = expression.evaluate(exchange, String.class);
+ assertEquals("Hi from Camel\n", s);
+ }
+
@Override
protected String getLanguageName() {
return "simple";