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 9fef939 CAMEL-16861: Polished groovy language
9fef939 is described below
commit 9fef939c56d643c705f56f186498c7c00ae2a9b2
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Sep 13 18:01:34 2021 +0200
CAMEL-16861: Polished groovy language
---
.../src/main/docs/groovy-language.adoc | 134 ++++++++-------------
1 file changed, 49 insertions(+), 85 deletions(-)
diff --git a/components/camel-groovy/src/main/docs/groovy-language.adoc
b/components/camel-groovy/src/main/docs/groovy-language.adoc
index cf56b42..d68f36d 100644
--- a/components/camel-groovy/src/main/docs/groovy-language.adoc
+++ b/components/camel-groovy/src/main/docs/groovy-language.adoc
@@ -11,30 +11,19 @@
include::{cq-version}@camel-quarkus:ROOT:partial$reference/languages/groovy.adoc
*Since Camel {since}*
-Camel supports http://www.groovy-lang.org/[Groovy] to allow an
-xref:manual::expression.adoc[Expression] or
xref:manual::predicate.adoc[Predicate] to be
-used in the xref:manual::dsl.adoc[DSL].
+Camel has support for using http://www.groovy-lang.org/[Groovy].
-For example you could use Groovy to create an
-Predicate in a xref:{eip-vc}:eips:filter-eip.adoc[Message
-Filter] or as an Expression for a
-xref:{eip-vc}:eips:recipientList-eip.adoc[Recipient List].
-
-To use a Groovy expression use the following Java code
+For example, you can use Groovy in a xref:manual::predicate.adoc[Predicate]
+with the xref:{eip-vc}:eips:filter-eip.adoc[Message
+Filter] EIP.
[source,java]
---------------------------------------
groovy("someGroovyExpression")
---------------------------------------
-For example you could use the *groovy* function to create an
-Predicate in a xref:{eip-vc}:eips:filter-eip.adoc[Message Filter] or as an
Expression for a
-Recipient List
-
== Groovy Options
-
-
// language options: START
The Groovy language supports 1 options, which are listed below.
@@ -47,19 +36,57 @@ The Groovy language supports 1 options, which are listed
below.
|===
// language options: END
+== Examples
+
+In the example below we use a groovy script as predicate in the message filter,
+to determine if any line items is over $100:
+
+[source,java]
+------------------------------------------------------------------------------------------------
+// lets route if a line item is over $100
+from("queue:foo")
+ .filter(groovy("request.lineItems.any { i -> i.value > 100 }"))
+ .to("queue:bar")
+------------------------------------------------------------------------------------------------
+
+And in XML DSL:
+[source,xml]
+----
+<route>
+ <from uri="queue:foo"/>
+ <filter>
+ <groovy>request.lineItems.any { i -> i.value > 100 }</groovy>
+ <to uri="queue:bar"/>
+ </filter>
+</route>
+----
+== How to get the result from multiple statements script
+
+As the Groovy script engine evaluate method just return a `Null` if it runs a
+multiple statements script. Camel now look up the value of script result
+by using the key of "result" from the value set. If you have multiple
+statements script, you need to make sure you set the value of result
+variable as the script return value.
+
+[source,text]
+-------------------------------------------------------------
+bar = "baz";
+# some other statements ...
+# camel take the result value as the script evaluation result
+result = body * 2 + 1
+-------------------------------------------------------------
== Customizing Groovy Shell
-Sometimes you may need to use custom `GroovyShell` instance in your
-Groovy expressions. To provide custom `GroovyShell`, add implementation
+For very special use-cases you may need to use a custom `GroovyShell` instance
in your
+Groovy expressions. To provide the custom `GroovyShell`, add an implementation
of the `org.apache.camel.language.groovy.GroovyShellFactory` SPI
-interface to your Camel registry. For example after adding the following
-bean to your Spring context...
+interface to the Camel registry.
[source,java]
-----------------------------------------------------------------------
+----
public class CustomGroovyShellFactory implements GroovyShellFactory {
public GroovyShell createGroovyShell(Exchange exchange) {
@@ -71,58 +98,11 @@ public class CustomGroovyShellFactory implements
GroovyShellFactory {
}
}
-----------------------------------------------------------------------
+----
-...Camel will use your custom GroovyShell instance (containing your
+Camel will then use your custom GroovyShell instance (containing your
custom static imports), instead of the default one.
-=== Customizing Groovy class file name
-
-You may rarely in need of customizing generated Groovy class file name for
debugging purposes.
-This is also possible by implementing `getFileName` method.
-
-[source,java]
-----------------------------------------------------------------------
-public class CustomGroovyShellFactory implements GroovyShellFactory {
-
- public GroovyShell createGroovyShell(Exchange exchange) {
- return new GroovyShell();
- }
-
- public String getFileName(Exchange exchange) {
- return "Foo.groovy";
- }
-
-}
-----------------------------------------------------------------------
-
-== Example
-
-[source,java]
-------------------------------------------------------------------------------------------------
-// lets route if a line item is over $100
-from("queue:foo").filter(groovy("request.lineItems.any { i -> i.value > 100
}")).to("queue:bar")
-------------------------------------------------------------------------------------------------
-
-And the Spring DSL:
-
-[source,xml]
------------------------------------------------------------------------------
- <route>
- <from uri="queue:foo"/>
- <filter>
- <groovy>request.lineItems.any { i -> i.value > 100 }</groovy>
- <to uri="queue:bar"/>
- </filter>
- </route>
------------------------------------------------------------------------------
-
-== Additional arguments to ScriptingEngine
-
-You can provide additional arguments to the `ScriptingEngine` using a
-header on the Camel message with the key `CamelScriptArguments`. +
- See this example:
-
== Loading script from external resource
You can externalize the script and have Camel load it from a resource
@@ -135,22 +115,6 @@ eg to refer to a file on the classpath you can do:
.setHeader("myHeader").groovy("resource:classpath:mygroovy.groovy")
-------------------------------------------------------------------
-== How to get the result from multiple statements script
-
-As the scripteengine evaluate method just return a Null if it runs a
-multiple statements script. Camel now look up the value of script result
-by using the key of "result" from the value set. If you have multiple
-statements script, you need to make sure you set the value of result
-variable as the script return value.
-
-[source,text]
--------------------------------------------------------------
-bar = "baz";
-# some other statements ...
-# camel take the result value as the script evaluation result
-result = body * 2 + 1
--------------------------------------------------------------
-
== Dependencies
To use scripting languages in your camel routes you need to add a