ScriptContext
The JSR-223 scripting languages ScriptContext is pre configured with the following attributes all set at ENGINE_SCOPE:
Attribute |
Type |
Value |
context |
org.apache.camel.CamelContext |
The Camel Context |
exchange |
org.apache.camel.Exchange |
The current Exchange |
request |
org.apache.camel.Message |
The IN message |
response |
org.apache.camel.Message |
The OUT message |
Attributes
You can add your own attributes with the attribute(name, value) DSL method, such as:
In the sample below we add an attribute user that is an object we already have instantiated as myUser. This object has a getFirstName() method that we want to set as header on the message. We use the groovy language to concat the first and last name into a single string that is returned.
from("direct:in").setHeader("name").groovy("'$user.firstName $user.lastName'").attribute("user", myUser).to("seda:users");
Any scripting language
Camel can run any JSR-223 scripting languages using the script DSL method such as:
from("direct:in").setHeader("firstName").script("jaskel", "user.firstName").attribute("user", myUser).to("seda:users");
This is a bit different using the Spring DSL where you use the _expression_ element that doesn't support setting attributes (yet):
<from uri="direct:in"/>
<setHeader headerName="firstName">
<_expression_ language="jaskel">user.firstName</_expression_>
</setHeader>
<to uri="seda:users"/>
You can also use predicates e.g. in a Filter:
<filter>
<language language="beanshell">request.getHeaders().get("Foo").equals("Bar")</language>
<to uri="direct:next" />
</filter>
Some languages with DSL support include:
Language |
DSL keyword |
EL |
el |
Groovy |
groovy |
_javascript_ |
_javascript_ |
JoSQL |
sql |
JXPath |
jxpath |
MVEL |
mvel |
OGNL |
ognl |
PHP |
php |
Python |
python |
Ruby |
ruby |
XPath |
xpath |
XQuery |
xquery |
Some languages without specific DSL support but known to work with these generic methods include:
Language |
Implementation |
language="..." value |
BeanShell |
BeanShell 2.0b5 |
beanshell or bsh |
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).
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-script</artifactId>
<version>1.4.0</version>
</dependency>