MVEL
Since Camel 2.0
Camel allows Mvel to be used as an Expression or Predicate the DSL or Xml Configuration.
You could use Mvel to create an Predicate in a Message Filter or as an Expression for a Recipient List
You can use Mvel dot notation to invoke operations. If you for instance
have a body that contains a POJO that has a getFamiliyName
method then
you can construct the syntax as follows:
"request.body.familyName"
// or
"getRequest().getBody().getFamilyName()"
Mvel Options
The MVEL language supports 1 options, which are listed below.
Name | Default | Java Type | Description |
---|---|---|---|
trim |
|
|
Whether to trim the value to remove leading and trailing whitespaces and line breaks |
Spring Boot Auto-Configuration
When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mvel-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 4 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
camel.component.mvel.enabled |
Enable mvel component |
true |
Boolean |
camel.component.mvel.resolve-property-placeholders |
Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. |
true |
Boolean |
camel.language.mvel.enabled |
Enable mvel language |
true |
Boolean |
camel.language.mvel.trim |
Whether to trim the value to remove leading and trailing whitespaces and line breaks |
true |
Boolean |
Variables
Variable | Type | Description |
---|---|---|
this |
Exchange |
the Exchange is the root object |
exchange |
Exchange |
the Exchange object |
exception |
Throwable |
the Exchange exception (if any) |
exchangeId |
String |
the exchange id |
fault |
Message |
the Fault message (if any) |
request |
Message |
the exchange.in message |
response |
Message |
the exchange.out message (if any) |
properties |
Map |
the exchange properties |
property(name) |
Object |
the property by the given name |
property(name, type) |
Type |
the property by the given name as the given type |
Samples
For example you could use Mvel inside a Message Filter in XML
<route>
<from uri="seda:foo"/>
<filter>
<mvel>request.headers.foo == 'bar'</mvel>
<to uri="seda:bar"/>
</filter>
</route>
And the sample using Java DSL:
from("seda:foo").filter().mvel("request.headers.foo == 'bar'").to("seda:bar");
Loading script from external resource
Since Camel 2.11
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"`, eg to refer to a file on the classpath you can do:
.setHeader("myHeader").mvel("resource:classpath:script.mvel")
Dependencies
To use Mvel in your camel routes you need to add the a dependency on camel-mvel which implements the Mvel 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-mvel</artifactId>
<version>x.x.x</version>
</dependency>