OGNL
Since Camel 1.1
Camel allows OGNL (Apache Commons OGNL) to be used as an Expression or Predicate in Camel routes.
For example, you can use MVEL in a Predicate with the Content Based Router EIP.
You can use OGNL dot notation to invoke operations. If you for instance have a body that contains a POJO that has a getFamilyName
method then you can construct the syntax as follows:
request.body.familyName
Or use similar syntax as in Java:
getRequest().getBody().getFamilyName()
Variables
Variable | Type | Description |
---|---|---|
this | Exchange | the Exchange is the root object |
context | CamelContext | the CamelContext |
exchange | Exchange | the Exchange |
exchangeId | String | the exchange id |
exception | Throwable | the Exchange exception (if any) |
request | Message | the message |
message | Message | the message |
headers | Map | the message headers |
header(name) | Object | the message header by the given name |
header(name, type) | Type | the message header by the given name as the given type |
properties | Map | the exchange properties |
property(name) | Object | the exchange property by the given name |
property(name, type) | Type | the exchange property by the given name as the given type |
Example
For example, you could use OGNL inside a Message Filter
from("seda:foo")
.filter().ognl("request.headers.foo == 'bar'")
.to("seda:bar");
And in XML:
<route>
<from uri="seda:foo"/>
<filter>
<ognl>request.headers.foo == 'bar'</ognl>
<to uri="seda:bar"/>
</filter>
</route>
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:
.setHeader("myHeader").ognl("resource:classpath:myognl.txt")
Dependencies
To use OGNL in your camel routes you need to add the dependency on camel-ognl which implements the OGNL language.
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-ognl</artifactId>
<version>x.x.x</version>
</dependency>
Spring Boot Auto-Configuration
When using ognl with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-ognl-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 2 options, which are listed below.