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:
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
...
You can externalize the script and have Camel load it from a resource such as classpath:
, file:
, or http:
. This is done using the following syntax: resource:scheme:location
e.g. to refer to a file on the classpath you can do:
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.
...
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> |