This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch var in repository https://gitbox.apache.org/repos/asf/camel.git
commit 599cbb6413b35cda72f7bb3f208e9bb58a837e6c Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Dec 30 16:09:38 2023 +0100 CAMEL-19749: Add variables as concept to Camel --- .../org/apache/camel/builder/BuilderSupport.java | 34 +++++++++++++ docs/user-manual/modules/ROOT/pages/variables.adoc | 58 +++++++++++++++++++++- 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java index efd82afa711..1fabeee1813 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java @@ -124,18 +124,38 @@ public abstract class BuilderSupport implements CamelContextAware { /** * Returns a JOOR expression value builder + * + * @deprecated use java instead */ + @Deprecated public ValueBuilder joor(String value) { return Builder.joor(value); } /** * Returns a JOOR expression value builder + * + * @deprecated use java instead */ + @Deprecated public ValueBuilder joor(String value, Class<?> resultType) { return Builder.joor(value, resultType); } + /** + * Returns a Java expression value builder + */ + public ValueBuilder java(String value) { + return Builder.java(value); + } + + /** + * Returns a Java expression value builder + */ + public ValueBuilder java(String value, Class<?> resultType) { + return Builder.java(value, resultType); + } + /** * Returns a JSonPath expression value builder */ @@ -153,6 +173,20 @@ public abstract class BuilderSupport implements CamelContextAware { return Builder.jsonpath(value, resultType); } + /** + * Returns a JQ expression value builder + */ + public ValueBuilder jq(String value) { + return Builder.jq(value); + } + + /** + * Returns a JQ expression value builder + */ + public ValueBuilder jq(String value, Class<?> resultType) { + return Builder.jq(value, resultType); + } + /** * Returns a compiled simple expression value builder */ diff --git a/docs/user-manual/modules/ROOT/pages/variables.adoc b/docs/user-manual/modules/ROOT/pages/variables.adoc index 4715d124d98..f3fb2e7f989 100644 --- a/docs/user-manual/modules/ROOT/pages/variables.adoc +++ b/docs/user-manual/modules/ROOT/pages/variables.adoc @@ -79,4 +79,60 @@ xref:components:eips:setVariable-eip.adoc[SetVariable], and xref:components:eips These EIPs makes it possible to set and remove variables from routes. And you can also access variables from the xref:components:languages:simple-language.adoc[Simple] language. -TODO: Some examples here +In the following route we set a variable on the exchange which we use later to build a human-readable event message: + +[tabs] +==== +Java:: ++ +[source,java] +---- +from("kafka:order.in") + .setVariable("customerId", jq(".customer.custId")) + .setVariable("country", jq(".customer.address.co")) + .transform().simple("Order received from customer ${variable.customerId} in ${variable.country}") + .to("kafka:order.event"); +---- + +XML:: ++ +[source,xml] +---- +<route> + <from uri="kafka:order.in"/> + <setVariable name="customerId"> + <jq>.customer.custId</jq> + </setVariable> + <setVariable name="country"> + <jq>.customer.address.co</jq> + </setVariable> + <transform> + <simple>Order received from customer ${variable.customerId} in ${variable.country}</simple> + </transform> + <to uri="kafka:order.event"/> +</route> +---- + +YAML:: ++ +[source,yaml] +---- +- route: + from: + uri: kafka:order.in + steps: + - setVariable: + name: customerId + jq: + expression: .customer.custId + - setVariable: + name: country + jq: + expression: .customer.address.co + - transform: + simple: + expression: "Order received from customer ${variable.customerId} in ${variable.country}" + - to: + uri: kafka:order.event +---- +====