29.2. XML DSL
Simple expressions in XML DSL
In the XML DSL, you can use a simple expression by putting the expression inside a
simple
element. For example, to define a route that performs filtering based on the contents of the foo
header:
<route id="simpleExample"> <from uri="seda:orders"/> <filter> <simple>${in.header.foo}</simple> <to uri="mock:fooOrders"/> </filter> </route>
Alternative placeholder syntax
Sometimes—for example, if you have enabled Spring property placeholders or OSGi blueprint property placeholders—you might find that the
${Expression}
syntax clashes with another property placeholder syntax. In this case, you can disambiguate the placeholder using the alternative syntax, $simple{Expression}
, for the simple expression. For example:
<simple>Hello $simple{in.header.name}, how are you?</simple>
Customizing the start and end tokens
From XML configuration, you can customize the start and end tokens (
{
and }
, by default) by overriding the SimpleLanguage
instance. For example, to change the start and end tokens to [
and ]
, define a new SimpleLanguage
bean in your XML configuration file, as follows:
<bean id="simple" class="org.apache.camel.language.simple.SimpleLanguage"> <constructor-arg name="functionStartToken" value="["/> <constructor-arg name="functionEndToken" value="]"/> </bean>
Note
Customizing the start and end tokens affects all Apache Camel applications that share the same
camel-core
library on their classpath. For example, in an OSGi server this might affect many applications; whereas in a Web application (WAR file) it would affect only the Web application itself.
Whitespace and auto-trim in XML DSL
By default, whitespace preceding and following a simple expression is automatically trimmed in XML DSL. So this expression with surrounding whitespace:
<transform> <simple> data=${body} </simple> </transform>
is automatically trimmed, so that it is equivalent to this expression (no surrounding whitespace):
<transform> <simple>data=${body}</simple> </transform>
If you want to include newlines before or after the expression, you can either explicitly add a newline character, as follows:
<transform> <simple>data=${body}\n</simple> </transform>
or you can switch off auto-trimming, by setting the
trim
attribute to false
, as follows:
<transform trim="false"> <simple>data=${body} </simple> </transform>