Simple Expression Language
The Simple Expression Language is a really simple language you can use. Its primarily intended for being a really small and simple language for testing without requiring any new dependencies or knowledge of XPath; so its ideal for testing in camel-core. However for real world use cases you are generally recommended to choose a more expressive and powerful language such as:
- Bean Language
- EL
- OGNL
- one of the supported Scripting Languages
The simple language uses ${body
} placeholders for complex expressions where the expression contains constant literals. The ${ } placeholders can be omitted if the expression is only the token itself.
To get the body of the in message: "body"
, or "in.body"
or "${body}"
.
A complex expression must use ${ } placeholders, such as: "Hello ${in.header.name} how are you?"
.
You can have multiple tokens in the same expression: "Hello ${in.header.name} this is ${in.header.me} speaking"
.
However you can not nest tokens (i.e. having another ${ } placeholder in an existing, is not allowed).
Variables
Variable |
Description |
---|---|
id |
the input message id |
body |
the input body |
in.body |
the input body |
out.body |
the output body |
header.foo |
refer to the input foo header |
headers.foo |
refer to the input foo header |
in.header.foo |
refer to the input foo header |
in.headers.foo |
refer to the input foo header |
out.header.foo |
refer to the out header foo |
out.headers.foo |
refer to the out header foo |
property.foo |
refer to the foo property on the exchange |
sys.foo |
refer to the system property |
Samples
In the Spring XML sample below we filter based on a header value:
<from uri="seda:orders"> <filter> <simple>in.header.foo</simple> <to uri="mock:fooOrders"/> </filter> </from>
The Simple language can be used for the predicate test above in the Message Filter pattern, where we test if the in message has a foo
header (a header with the key foo
exists). If the expression evaluates to true then the message is routed to the mock:foo
endpoint, otherwise its lost in the deep blue sea .
The same example in Java DSL:
from("seda:orders") .filter().simple("in.header.foo").to("seda:fooOrders");
You can also use the simple language for simple text concatenations such as:
from("direct:hello").transform().simple("Hello ${in.header.user} how are you?").to("mock:reply");
Notice that we must use ${ } placeholders in the expression now to let Camel be able to parse it correctly.
Dependencies
The Bean language is part of camel-core.