## MVEL Language

*Available as of Camel version 2.0*

Camel allows Mvel to be used as an link:expression.html[Expression] or
link:predicate.html[Predicate] the link:dsl.html[DSL] or
link:xml-configuration.html[Xml Configuration].

You could use Mvel to create an link:predicate.html[Predicate] in a
link:message-filter.html[Message Filter] or as an
link:expression.html[Expression] for a
link:recipient-list.html[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:

[source,java]
----------------------------------------
"request.body.familyName"
   // or 
"getRequest().getBody().getFamilyName()"
----------------------------------------

### Mvel Options

// language options: START
The MVEL language supports 1 options which are listed below.



[width="100%",cols="2,1m,1m,6",options="header"]
|=======================================================================
| Name | Default | Java Type | Description
| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
|=======================================================================
// language options: END

### Variables

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|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 link:message-filter.html[Message
Filter] in XML

[source,java]
---------------------------------------------
<route>
  <from uri="seda:foo"/>
  <filter>
    <mvel>request.headers.foo == 'bar'</mvel>
    <to uri="seda:bar"/>
  </filter>
</route>
---------------------------------------------

And the sample using Java DSL:

[source,java]
---------------------------------------------------------------------------------
   from("seda:foo").filter().mvel("request.headers.foo == 'bar'").to("seda:bar");
---------------------------------------------------------------------------------

### Loading script from external resource

*Available as of 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:

[source,java]
-------------------------------------------------------------
.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
link:download.html[the download page for the latest versions]).

[source,java]
-------------------------------------
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-mvel</artifactId>
  <version>x.x.x</version>
</dependency>
-------------------------------------
