The simple language provides various elementary expressions that return different
parts of a message exchange. For example, the expression,
simple("${header.timeOfDay}"), would return the contents of a
header called timeOfDay from the incoming message.
![]() | Note |
|---|---|
Since Apache Camel 2.9, you must always use the placeholder
syntax, |
You can use the simple language to define string expressions, based on the
variables provided. For example, you can use a variable of the form,
in.header.HeaderName, to obtain the
value of the HeaderName header, as follows:
simple("${in.header.foo}")You can embed simple variables in a string expression—for example:
simple("Received a message from ${in.header.user} on ${date:in.header.date:yyyyMMdd}.")As well as providing variables that access all of the different parts of an
exchange (see Table 12, “Variables for the Simple Language”), the simple language also
provides special variables for formatting dates,
date:command:pattern,
and for calling bean methods, bean:beanRef.
For example, you can use the date and the bean variables as follows:
simple("Todays date is ${date:now:yyyyMMdd}")
simple("The order type is ${bean:orderService?method=getOrderType}")You can specify the result type of an expression explicitly. This is mainly useful for converting the result type to a boolean or numerical type.
In the Java DSL, specify the result type as an extra argument to
simple(). For example, to return an integer result, you could
evaluate a simple expression as follows:
...
.setHeader("five", simple("5", Integer.class)) In the XML DSL, specify the result type using the resultType
attribute. For example:
<setHeader headerName="five">
<!-- use resultType to indicate that the type should be a java.lang.Integer -->
<simple resultType="java.lang.Integer">5</simple>
</setHeader> From Camel 2.17, the setHeaderand setExchange properties allows to use a dynamic header key using the Simple language, if the name of the key is a Simple language expression.
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="direct:start"/>
<setHeader headerName="$simple{type:org.apache.camel.spring.processor.SpringSetPropertyNameDynamicTest$TestConstans.EXCHANGE_PROP_TX_FAILED}">
<simple>${type:java.lang.Boolean.TRUE}</simple>
</setHeader>
<to uri="mock:end"/>
</route>
</camelContext>
Simple expressions can be nested—for example:
simple("${header.${bean:headerChooser?method=whichHeader}}")You can access a bean's constant or enum fields using the following syntax:
type:ClassName.Field
For example, consider the following Java enum type:
package org.apache.camel.processor;
...
public enum Customer {
GOLD, SILVER, BRONZE
} You can access the Customer enum fields, as follows:
from("direct:start")
.choice()
.when().simple("${header.customer} ==
${type:org.apache.camel.processor.Customer.GOLD}")
.to("mock:gold")
.when().simple("${header.customer} ==
${type:org.apache.camel.processor.Customer.SILVER}")
.to("mock:silver")
.otherwise()
.to("mock:other"); The Object Graph Navigation
Language (OGNL) is a notation for invoking bean methods in a chain-like
fashion. If a message body contains a Java bean, you can easily access its bean
properties using OGNL notation. For example, if the message body is a Java object
with a getAddress() accessor, you can access the Address
object and the Address object's properties as follows:
simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")
simple("${body.address.city}")Where the notation, ${body.address.street}, is shorthand for
${body.getAddress.getStreet}.
You can use the null-safe operator, ?., to avoid encountering
null-pointer exceptions, in case the body does not have an
address. For example:
simple("${body?.address?.street}")If the body is a java.util.Map type, you can look up a value in the
map with the key, foo, using the following notation:
simple("${body[foo]?.name}")You can also use square brackets notation, [k], to access the
elements of a list. For example:
simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")The last keyword returns the index of the last element of a list. For
example, you can access the second last element of a list, as
follows:
simple("${body.address.lines[last-1]}")You can use the size method to query the size of a list, as
follows:
simple("${body.address.lines.size}")