ScriptContext
Options
...
The JSR-223
scripting language's ScriptContext
is pre-configured with the following attributes all set at ENGINE_SCOPE
.
Attribute | Type | Value |
---|---|---|
|
| The Camel Context. |
|
| The Camel Context (cannot be used in groovy). |
|
| The current Exchange. |
|
| Camel 2.9: Function with a |
|
| The |
|
| Deprecated: The |
...
You can provide additional arguments to the ScriptingEngine
using a header on the Camel message with the key CamelScriptArguments
.
Example: {snippet:id=e1|lang=java|url=camel/trunk/components/camel-script/src/test/java/org/apache/camel/builder/script/JavaScriptExpressionTest.java} Wiki Markup
Code Block | ||
---|---|---|
| ||
public void testArgumentsExample() throws Exception {
getMockEndpoint("mock:result").expectedMessageCount(0);
getMockEndpoint("mock:unmatched").expectedMessageCount(1);
// additional arguments to ScriptEngine
Map<String, Object> arguments = new HashMap<>();
arguments.put("foo", "bar");
arguments.put("baz", 7);
// those additional arguments is provided as a header on the Camel Message
template.sendBodyAndHeader("direct:start", "hello", ScriptBuilder.ARGUMENTS, arguments);
assertMockEndpointsSatisfied();
|
Using Properties Function
...
If you need to use the Properties component from a script to lookup property placeholders, then its a bit cumbersome to do so. For example, to set a header name myHeader
with a value from a property placeholder, whose key is taken from a header named foo
.
Code Block | ||
---|---|---|
| ||
.setHeader("myHeader").groovy("context.resolvePropertyPlaceholders('{{' + request.headers.get('foo') + '}}')")
|
From Camel 2.9: you can now use the properties function and the same example is simpler:
Code Block | ||
---|---|---|
| ||
.setHeader("myHeader").groovy("properties.resolve(request.headers.get('foo'))")
|
Loading Script From External Resource
...
Code Block | ||
---|---|---|
| ||
.setHeader("myHeader").groovy("resource:classpath:mygroovy.groovy")
|
How to Get the Result from Multiple Statements Script
...
The script engine's eval method returns a null
when it runs a multi-statement script. However, Camel can look up the value of a script's result by using the key result
from the value set. When writing a multi-statement script set the value of the result
variable as the script return value.
...
language | text |
---|
...
textbar = "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 the a dependency on camel-script
which integrates the JSR-223 scripting engine.
If you use maven you could just add the following to your pom.xml
, substituting the version number for the latest & greatest release (see the download page for the latest versions).
Code Block | ||
---|---|---|
| ||
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-script</artifactId> <version>x.x.x</version> </dependency> |