RubyCamel supports Ruby among other Scripting Languages to allow an Expression or Predicate to be used in the DSL or Xml Configuration. To use a Ruby expression use the following Java code
... ruby("someRubyExpression") ...
For example you could use the ruby function to create an Predicate in a Message Filter or as an Expression for a Recipient List ExampleIn the sample below we use Ruby to create a Predicate use in the route path, to route exchanges from admin users to a special queue.
from("direct:start")
.choice()
.when().ruby("$request.headers['user'] == 'admin'").to("seda:adminQueue")
.otherwise()
.to("seda:regularQueue");
And a Spring DSL sample as well:
<route>
<from uri="direct:start"/>
<choice>
<when>
<ruby>$request.headers['user'] == 'admin'</ruby>
<to uri="seda:adminQueue"/>
</when>
<otherwise>
<to uri="seda:regularQueue"/>
</otherwise>
</choice>
</route>
ScriptContextThe JSR-223 scripting languages ScriptContext is pre configured with the following attributes all set at ENGINE_SCOPE:
AttributesYou 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 languageCamel 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"/>
DependenciesTo 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> |