Modified: websites/production/camel/content/simple.html
==============================================================================
--- websites/production/camel/content/simple.html (original)
+++ websites/production/camel/content/simple.html Sun May 22 08:21:07 2016
@@ -86,7 +86,7 @@
<tbody>
<tr>
<td valign="top" width="100%">
-<div class="wiki-content maincontent"><h2
id="Simple-SimpleExpressionLanguage">Simple Expression Language</h2><p>The
Simple Expression Language was a really simple language when it was created,
but has since grown more powerful. It is primarily intended for being a really
small and simple language for evaluating <a shape="rect"
href="expression.html">Expression</a>s and <a shape="rect"
href="predicate.html">Predicate</a>s without requiring any new dependencies or
knowledge of <a shape="rect" href="xpath.html">XPath</a>; so it is ideal for
testing in camel-core. The idea was to cover 95% of the common use cases when
you need a little bit of expression based script in your Camel
routes.</p><p>However for much more complex use cases you are generally
recommended to choose a more expressive and powerful language such
as:</p><ul><li><a shape="rect" href="spel.html">SpEL</a></li><li><a
shape="rect" href="mvel.html">Mvel</a></li><li><a shape="rect"
href="groovy.html">Groovy</a></li><li><a
shape="rect" href="javascript.html">JavaScript</a></li><li><a shape="rect"
href="el.html">EL</a></li><li><a shape="rect"
href="ognl.html">OGNL</a></li><li>one of the supported <a shape="rect"
href="scripting-languages.html">Scripting Languages</a></li></ul><p>The simple
language uses <code>${body</code>} placeholders for complex expressions where
the expression contains constant literals. The ${ } placeholders can be omitted
if the expression is only the token itself.</p><div
class="confluence-information-macro confluence-information-macro-tip"><p
class="title">Alternative syntax</p><span class="aui-icon aui-icon-small
aui-iconfont-approve confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>From Camel 2.5 onwards you can
also use the alternative syntax which uses $simple{ } as placeholders.<br
clear="none"> This can be used in situations to avoid clashes when using for
example Spring property placeholder together with Camel.</p></div></div><di
v class="confluence-information-macro confluence-information-macro-tip"><p
class="title">Configuring result type</p><span class="aui-icon aui-icon-small
aui-iconfont-approve confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>From Camel 2.8 onwards you can
configure the result type of the <a shape="rect" href="simple.html">Simple</a>
expression. For example to set the type as a <code>java.lang.Boolean</code> or
a <code>java.lang.Integer</code> etc.</p></div></div><div
class="confluence-information-macro
confluence-information-macro-information"><p class="title">File language is now
merged with Simple language</p><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>From Camel 2.2 onwards, the <a
shape="rect" href="file-language.html">File Language</a> is now merged with <a
shape="rect" href="simple.html">Simple</a> language which means you can use all
the file syntax directly within the simple language.</p></div></div><div
class="confluence-information-macro
confluence-information-macro-information"><p class="title">Simple Language
Changes in Camel 2.9 onwards</p><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>The <a shape="rect"
href="simple.html">Simple</a> language have been improved from Camel 2.9
onwards to use a better syntax parser, which can do index precise error
messages, so you know exactly what is wrong and where the problem is. For
example if you have made a typo in one of the operators, then previously the
parser would not be able to detect this, and cause the evaluation to be true.
There are a few changes in the syntax which are no longer backwards compatible.
When using <a shape="rect" href="simple.html">Simple</a> language as a <a
shape="rect" href="predicate.html">Predicate</a> then the literal text
<strong>must</s
trong> be enclosed in either single or double quotes. For example:
<code>"${body} == 'Camel'"</code>. Notice how we have single quotes around the
literal. The old style of using <code>"body"</code> and
<code>"header.foo"</code> to refer to the message body and header is
@deprecated, and it is encouraged to always use ${ } tokens for the built-in
functions.<br clear="none"> The range operator now requires the range to be in
single quote as well as shown: <code>"${header.zip} between
'30000..39999'"</code>.</p></div></div><p>To get the body of the in message:
<code>"body"</code>, or <code>"in.body"</code> or
<code>"${body}"</code>.</p><p>A complex expression must use ${ } placeholders,
such as: <code>"Hello ${in.header.name} how are you?"</code>.</p><p>You can
have multiple functions in the same expression: <code>"Hello ${in.header.name}
this is ${in.header.me} speaking"</code>.<br clear="none"> However you can
<strong>not</strong> nest functions in Camel 2.8.x or older (i.e. having a
nother ${ } placeholder in an existing, is not allowed).<br clear="none"> From
<strong>Camel 2.9</strong> onwards you can nest functions.</p><h3
id="Simple-Variables">Variables</h3><div class="confluenceTableSmall"><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Variable</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>camelId</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.10:</strong> the <a shape="rect"
href="camelcontext.html">CamelContext</a> name</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p>camelContext.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="conf
luenceTd"><p><strong>Camel 2.11:</strong> the CamelContext invoked using a
Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">exchange</td><td colspan="1" rowspan="1"
class="confluenceTd">Exchange</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.16:</strong> the <a shape="rect"
href="exchange.html">Exchange</a></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">exchange.<strong>OGNL</strong></td><td colspan="1"
rowspan="1" class="confluenceTd">Object</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.16:</strong><span> the </span><a
shape="rect" href="exchange.html">Exchange</a><span> invoked using a Camel OGNL
expression.</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exchangeId</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> the exchange
id</p></td></tr><tr><td cols
pan="1" rowspan="1" class="confluenceTd"><p>id</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the input message id</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>body</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the input body</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>in.body</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the input body</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>body.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> the input body
invoked using a Camel OGNL expression.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluence
Td"><p>in.body.<strong>OGNL</strong></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> the input body invoked
using a Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>bodyAs(<em>type</em>)</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Type</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> Converts the body to the
given type determined by its classname. The converted body can be
null.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>mandatoryBodyAs(<em>type</em>)</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Type</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.5:</strong> Converts the body to the
given type determined by its classname, and expects the body to be not
null.</p></td></tr><tr><td colspan="1" rowspan="1" class="con
fluenceTd"><p>out.body</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the output body</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>header.foo</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>header[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the
input foo header</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>headers.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>headers[foo]</p></t
d><td colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong>
refer to the input foo header</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.header.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>in.header[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the
input foo header</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.headers.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd
"><p>in.headers[foo]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the input foo
header</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>header.foo[bar]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> regard input foo header as
a map and perform lookup on the map with bar as key</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>in.header.foo[bar]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> regard input
foo header as a map and perform lookup on the map with bar as
key</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.headers.foo[bar]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p
>Object</p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p><strong>Camel 2.3:</strong> regard input foo header
>as a map and perform lookup on the map with bar as key</p></td></tr><tr><td
>colspan="1" rowspan="1"
>class="confluenceTd"><p>header.foo.<strong>OGNL</strong></p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong>
>refer to the input foo header and invoke its value using a Camel OGNL
>expression.</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p>in.header.foo.<strong>OGNL</strong></p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td
>colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong>
>refer to the input foo header and invoke its value using a Camel OGNL
>expression.</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p>in.headers.foo.<strong>OGNL</strong></p></td><td
>colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the input foo
header and invoke its value using a Camel OGNL expression.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>out.header.foo</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>refer to the out header
foo</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>out.header[foo]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header
foo</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>out.headers.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the out header foo</p></td></tr><tr><td
colspan="1" rowspan="1" c
lass="confluenceTd"><p>out.headers[foo]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header
foo</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>headerAs(<em>key</em>,<em>type</em>)</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Type</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> Converts the
header to the given type determined by its classname</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>headers</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9:</strong> refer to the input
headers</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.headers</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1" class="conf
luenceTd"><p><strong>Camel 2.9:</strong> refer to the input
headers</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>property.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Deprecated:</strong> refer to the foo property
on the exchange</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">exchangeProperty.foo</td><td colspan="1" rowspan="1"
class="confluenceTd">Object</td><td colspan="1" rowspan="1"
class="confluenceTd"><span><strong>Camel 2.15:</strong> refer to the foo
property on the exchange</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>property[foo]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Deprecated:</strong> refer to the foo property
on the exchange</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>exchangeProperty
[foo]</span></td><td colspan="1" rowspan="1"
class="confluenceTd">Object</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.15:</strong><span> refer to the foo
property on the exchange</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>property.foo.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Deprecated:</strong> refer to the
foo property on the exchange and invoke its value using a Camel OGNL
expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>exchangeProperty.foo.</span><strong>OGNL</strong></td><td
colspan="1" rowspan="1" class="confluenceTd">Object</td><td colspan="1"
rowspan="1" class="confluenceTd"><strong>Camel 2.15:</strong><span> refer to
the foo property on the exchange and invoke its value using a Camel OGNL
expression.</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>s
ys.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the system property</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>sysenv.foo</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the
system environment</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.4:</strong> Refer to the exception
object on the exchange, is <strong>null</strong> if no exception set on
exchange. Will fallback and grab caught exceptions
(<code>Exchange.EXCEPTION_CAUGHT</code>) if the Exchange has
any.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception.<strong>OGNL</strong></p></td><td colspan=
"1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.4:</strong> Refer to the
exchange exception invoked using a Camel OGNL expression
object</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception.message</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Refer to the exception.message on the exchange, is
<strong>null</strong> if no exception set on exchange. Will fallback and grab
caught exceptions (<code>Exchange.EXCEPTION_CAUGHT</code>) if the Exchange has
any.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception.stacktrace</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.6.</strong> Refer to the
exception.stracktrace on the exchange, is <strong>null</strong> if no exception
set on exchange. Wil
l fallback and grab caught exceptions (<code>Exchange.EXCEPTION_CAUGHT</code>)
if the Exchange has any.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>date:<em>command:pattern</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Date formatting using the
<code>java.text.SimpleDataFormat</code> patterns. Supported commands are:
<strong>now</strong> for current timestamp, <strong>in.header.xxx</strong> or
<strong>header.xxx</strong> to use the Date object in the IN header with the
key xxx. <strong>out.header.xxx</strong> to use the Date object in the OUT
header with the key xxx.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>bean:<em>bean expression</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Invoking a bean expression using the <a shape="rect"
href="bean.html">Bean</a> languag
e. Specifying a method name you must use dot as separator. We also support the
?method=methodname syntax that is used by the <a shape="rect"
href="bean.html">Bean</a> component.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p>properties:<em>locations:key</em></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Deprecated (use properties-location
instead) Camel 2.3:</strong> Lookup a property with the given key. The
<code>locations</code> option is optional. See more at <a shape="rect"
href="using-propertyplaceholder.html">Using
PropertyPlaceholder</a>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>properties-location:<em><a shape="rect"
class="external-link" href="http://locationskey"
rel="nofollow">locations:key</a></em></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Cam
el 2.14.1:</strong> Lookup a property with the given key. The
<code>locations</code> option is optional. See more at <a shape="rect"
href="using-propertyplaceholder.html">Using
PropertyPlaceholder</a>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">properties:key:default</td><td colspan="1" rowspan="1"
class="confluenceTd">String</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.14.1</strong>: Lookup a property with the
given key. If the key does not exists or has no value, then an optional default
value can be specified.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>routeId</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.11:</strong> Returns the id of the
current route the <a shape="rect" href="exchange.html">Exchange</a> is being
routed.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>threadName</p></td><td col
span="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> Returns the
name of the current thread. Can be used for logging
purpose.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>ref:xxx</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.6:</strong> To lookup a bean from the
<a shape="rect" href="registry.html">Registry</a> with the given
id.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>type:name.field</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.11:</strong> To refer to a type or
field by its FQN name. To refer to a field you can append .FIELD_NAME. For
example you can refer to the constant field from Exchange as:
<code>org.apache.camel.Exchange.FILE_NAME</code></p></td>
<td colspan="1" rowspan="1" class="confluenceTd"><p>.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.12.3:</strong> represents a
<strong>null</strong></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>random<em>(value)</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Integer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a random Integer
between 0 (included) and <em>value</em> (excluded)</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p>random<em>(min,max)</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Integer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a random Integer
between <em>min</em> (included) and <em>max</em> (excluded)</p></td></tr>
<tr><td colspan="1" rowspan="1" class="confluenceTd">collate(group)</td><td
colspan="1" rowspan="1" class="confluenceTd">List</td><td colspan="1"
rowspan="1" class="confluenceTd"><strong>Camel 2.17:</strong> The collate
function iterates the message body and groups the data into sub lists of
specified size. This can be used with the <a shape="rect"
href="splitter.html">Splitter</a> EIP to split a message body and group/batch
the splitted sub message into a group of N sub lists. This method works similar
to the collate method in Groovy.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">messageHistory</td><td colspan="1" rowspan="1"
class="confluenceTd">String</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.17:</strong> The message history of the
current exchange how it has been routed. This is similar to the route
stack-trace message history the error handler logs in case of an unhandled
exception.</td></tr><tr><td colspan="1" rowspan="1" class="confl
uenceTd"><span>messageHistory(false)</span></td><td colspan="1" rowspan="1"
class="confluenceTd">String</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.17:</strong><span> </span>As
messageHistory but without the exchange details (only includes the route
strack-trace). This can be used if you do not want to log sensitive data from
the message itself.</td></tr></tbody></table></div></div><h3
id="Simple-OGNLexpressionsupport">OGNL expression
support</h3><p><strong>Available as of Camel 2.3</strong></p><div
class="confluence-information-macro
confluence-information-macro-information"><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Camel's OGNL support is for
invoking methods only. You cannot access fields.<br clear="none"> From
<strong>Camel 2.11.1</strong> onwards we added special support for accessing
the length field of Java arrays.</p></div></div><p>The <a sha
pe="rect" href="simple.html">Simple</a> and <a shape="rect"
href="bean.html">Bean</a> language now supports a Camel OGNL notation for
invoking beans in a chain like fashion.<br clear="none"> Suppose the Message IN
body contains a POJO which has a <code>getAddress()</code> method.</p><p>Then
you can use Camel OGNL notation to access the address object:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+<div class="wiki-content maincontent"><h2
id="Simple-SimpleExpressionLanguage">Simple Expression Language</h2><p>The
Simple Expression Language was a really simple language when it was created,
but has since grown more powerful. It is primarily intended for being a really
small and simple language for evaluating <a shape="rect"
href="expression.html">Expression</a>s and <a shape="rect"
href="predicate.html">Predicate</a>s without requiring any new dependencies or
knowledge of <a shape="rect" href="xpath.html">XPath</a>; so it is ideal for
testing in camel-core. The idea was to cover 95% of the common use cases when
you need a little bit of expression based script in your Camel
routes.</p><p>However for much more complex use cases you are generally
recommended to choose a more expressive and powerful language such
as:</p><ul><li><a shape="rect" href="spel.html">SpEL</a></li><li><a
shape="rect" href="mvel.html">Mvel</a></li><li><a shape="rect"
href="groovy.html">Groovy</a></li><li><a
shape="rect" href="javascript.html">JavaScript</a></li><li><a shape="rect"
href="el.html">EL</a></li><li><a shape="rect"
href="ognl.html">OGNL</a></li><li>one of the supported <a shape="rect"
href="scripting-languages.html">Scripting Languages</a></li></ul><p>The simple
language uses <code>${body</code>} placeholders for complex expressions where
the expression contains constant literals. The ${ } placeholders can be omitted
if the expression is only the token itself.</p><div
class="confluence-information-macro confluence-information-macro-tip"><p
class="title">Alternative syntax</p><span class="aui-icon aui-icon-small
aui-iconfont-approve confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>From Camel 2.5 onwards you can
also use the alternative syntax which uses $simple{ } as placeholders.<br
clear="none"> This can be used in situations to avoid clashes when using for
example Spring property placeholder together with Camel.</p></div></div><di
v class="confluence-information-macro confluence-information-macro-tip"><p
class="title">Configuring result type</p><span class="aui-icon aui-icon-small
aui-iconfont-approve confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>From Camel 2.8 onwards you can
configure the result type of the <a shape="rect" href="simple.html">Simple</a>
expression. For example to set the type as a <code>java.lang.Boolean</code> or
a <code>java.lang.Integer</code> etc.</p></div></div><div
class="confluence-information-macro
confluence-information-macro-information"><p class="title">File language is now
merged with Simple language</p><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>From Camel 2.2 onwards, the <a
shape="rect" href="file-language.html">File Language</a> is now merged with <a
shape="rect" href="simple.html">Simple</a> language which means you can use all
the file syntax directly within the simple language.</p></div></div><div
class="confluence-information-macro
confluence-information-macro-information"><p class="title">Simple Language
Changes in Camel 2.9 onwards</p><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>The <a shape="rect"
href="simple.html">Simple</a> language have been improved from Camel 2.9
onwards to use a better syntax parser, which can do index precise error
messages, so you know exactly what is wrong and where the problem is. For
example if you have made a typo in one of the operators, then previously the
parser would not be able to detect this, and cause the evaluation to be true.
There are a few changes in the syntax which are no longer backwards compatible.
When using <a shape="rect" href="simple.html">Simple</a> language as a <a
shape="rect" href="predicate.html">Predicate</a> then the literal text
<strong>must</s
trong> be enclosed in either single or double quotes. For example:
<code>"${body} == 'Camel'"</code>. Notice how we have single quotes around the
literal. The old style of using <code>"body"</code> and
<code>"header.foo"</code> to refer to the message body and header is
@deprecated, and it is encouraged to always use ${ } tokens for the built-in
functions.<br clear="none"> The range operator now requires the range to be in
single quote as well as shown: <code>"${header.zip} between
'30000..39999'"</code>.</p></div></div><p>To get the body of the in message:
<code>"body"</code>, or <code>"in.body"</code> or
<code>"${body}"</code>.</p><p>A complex expression must use ${ } placeholders,
such as: <code>"Hello ${in.header.name} how are you?"</code>.</p><p>You can
have multiple functions in the same expression: <code>"Hello ${in.header.name}
this is ${in.header.me} speaking"</code>.<br clear="none"> However you can
<strong>not</strong> nest functions in Camel 2.8.x or older (i.e. having a
nother ${ } placeholder in an existing, is not allowed).<br clear="none"> From
<strong>Camel 2.9</strong> onwards you can nest functions.</p><h3
id="Simple-Variables">Variables</h3><div class="confluenceTableSmall"><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Variable</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>camelId</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.10:</strong> the <a shape="rect"
href="camelcontext.html">CamelContext</a> name</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p>camelContext.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="conf
luenceTd"><p><strong>Camel 2.11:</strong> the CamelContext invoked using a
Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">exchange</td><td colspan="1" rowspan="1"
class="confluenceTd">Exchange</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.16:</strong> the <a shape="rect"
href="exchange.html">Exchange</a></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">exchange.<strong>OGNL</strong></td><td colspan="1"
rowspan="1" class="confluenceTd">Object</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.16:</strong><span> the </span><a
shape="rect" href="exchange.html">Exchange</a><span> invoked using a Camel OGNL
expression.</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exchangeId</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> the exchange
id</p></td></tr><tr><td cols
pan="1" rowspan="1" class="confluenceTd"><p>id</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the input message id</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>body</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the input body</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>in.body</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>the input body</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>body.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> the input body
invoked using a Camel OGNL expression.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluence
Td"><p>in.body.<strong>OGNL</strong></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> the input body invoked
using a Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>bodyAs(<em>type</em>)</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Type</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> Converts the body to the
given type determined by its classname. The converted body can be
null.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>bodyAs(</span><em>type</em><span>).<strong>OGNL</strong></span></td><td
colspan="1" rowspan="1" class="confluenceTd">Object</td><td colspan="1"
rowspan="1" class="confluenceTd"><strong>Camel 2.18:</strong><span> Converts
the body to the given type determined by its classname and then invoke methods
using a Camel OGNL expression. The con
verted body can be null.</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>mandatoryBodyAs(<em>type</em>)</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Type</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.5:</strong> Converts the body to the
given type determined by its classname, and expects the body to be not
null.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>mandatoryBodyAs(</span><em>type</em><span>).<strong>OGNL</strong></span></td><td
colspan="1" rowspan="1" class="confluenceTd">Object</td><td colspan="1"
rowspan="1" class="confluenceTd"><strong>Camel 2.18:</strong><span> Converts
the body to the given type determined by its classname and then invoke methods
using a Camel OGNL expression.</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>out.body</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceT
d"><p>the output body</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>header.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>header[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the
input foo header</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>headers.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>headers[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</s
trong> refer to the input foo header</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>in.header.foo</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>in.header[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the
input foo header</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.headers.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the input foo header</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>in.headers[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"
><p><strong>Camel 2.9.2:</strong> refer to the input foo
>header</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p>header.foo[bar]</p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
>class="confluenceTd"><p><strong>Camel 2.3:</strong> regard input foo header
>as a map and perform lookup on the map with bar as key</p></td></tr><tr><td
>colspan="1" rowspan="1"
>class="confluenceTd"><p>in.header.foo[bar]</p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> regard input
>foo header as a map and perform lookup on the map with bar as
>key</p></td></tr><tr><td colspan="1" rowspan="1"
>class="confluenceTd"><p>in.headers.foo[bar]</p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
>rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> regard input
>foo header as a map and perform loo
kup on the map with bar as key</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>header.foo.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the
input foo header and invoke its value using a Camel OGNL
expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.header.foo.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the
input foo header and invoke its value using a Camel OGNL
expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.headers.foo.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the
input foo h
eader and invoke its value using a Camel OGNL expression.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>out.header.foo</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>refer to the out header
foo</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>out.header[foo]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header
foo</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>out.headers.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to the out header foo</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>out.headers[foo]</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" c
lass="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header
foo</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>headerAs(<em>key</em>,<em>type</em>)</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Type</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> Converts the
header to the given type determined by its classname</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>headers</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9:</strong> refer to the input
headers</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>in.headers</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Map</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.9:</strong> refer to the input
headers</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>propert
y.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Deprecated:</strong> refer to the foo property
on the exchange</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">exchangeProperty.foo</td><td colspan="1" rowspan="1"
class="confluenceTd">Object</td><td colspan="1" rowspan="1"
class="confluenceTd"><span><strong>Camel 2.15:</strong> refer to the foo
property on the exchange</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>property[foo]</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Deprecated:</strong> refer to the foo property
on the exchange</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>exchangeProperty[foo]</span></td><td colspan="1"
rowspan="1" class="confluenceTd">Object</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.15
:</strong><span> refer to the foo property on the
exchange</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>property.foo.<strong>OGNL</strong></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Deprecated:</strong> refer to the
foo property on the exchange and invoke its value using a Camel OGNL
expression.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>exchangeProperty.foo.</span><strong>OGNL</strong></td><td
colspan="1" rowspan="1" class="confluenceTd">Object</td><td colspan="1"
rowspan="1" class="confluenceTd"><strong>Camel 2.15:</strong><span> refer to
the foo property on the exchange and invoke its value using a Camel OGNL
expression.</span></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>sys.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>refer to t
he system property</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>sysenv.foo</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the system
environment</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.4:</strong> Refer to the exception
object on the exchange, is <strong>null</strong> if no exception set on
exchange. Will fallback and grab caught exceptions
(<code>Exchange.EXCEPTION_CAUGHT</code>) if the Exchange has
any.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception.<strong>OGNL</strong></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.4:</strong> Refer to
the exchange exception invoked using a Camel OGNL expression
object</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception.message</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Refer to the exception.message on the exchange, is
<strong>null</strong> if no exception set on exchange. Will fallback and grab
caught exceptions (<code>Exchange.EXCEPTION_CAUGHT</code>) if the Exchange has
any.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>exception.stacktrace</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.6.</strong> Refer to the
exception.stracktrace on the exchange, is <strong>null</strong> if no exception
set on exchange. Will fallback and grab caught exceptions
(<code>Exchange.EXCEPTION_CAUGHT</code>) if the Exchange has
any.</p></td></tr><tr><td colspan="1" rowspan
="1" class="confluenceTd"><p>date:<em>command:pattern</em></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Date formatting using the
<code>java.text.SimpleDataFormat</code> patterns. Supported commands are:
<strong>now</strong> for current timestamp, <strong>in.header.xxx</strong> or
<strong>header.xxx</strong> to use the Date object in the IN header with the
key xxx. <strong>out.header.xxx</strong> to use the Date object in the OUT
header with the key xxx.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>bean:<em>bean expression</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Invoking a bean expression using the <a shape="rect"
href="bean.html">Bean</a> language. Specifying a method name you must use dot
as separator. We also support the ?method=methodname syntax that is used by the
<a shape="rect" hre
f="bean.html">Bean</a> component.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>properties:<em>locations:key</em></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Deprecated (use properties-location
instead) Camel 2.3:</strong> Lookup a property with the given key. The
<code>locations</code> option is optional. See more at <a shape="rect"
href="using-propertyplaceholder.html">Using
PropertyPlaceholder</a>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>properties-location:<em><a shape="rect"
class="external-link" href="http://locationskey"
rel="nofollow">locations:key</a></em></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.14.1:</strong> Lookup a property with
the given key. The <code>locations</code> option is optional. See more at <a
shape="rect" href="using
-propertyplaceholder.html">Using PropertyPlaceholder</a>.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd">properties:key:default</td><td
colspan="1" rowspan="1" class="confluenceTd">String</td><td colspan="1"
rowspan="1" class="confluenceTd"><strong>Camel 2.14.1</strong>: Lookup a
property with the given key. If the key does not exists or has no value, then
an optional default value can be specified.</td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>routeId</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.11:</strong> Returns the id of the
current route the <a shape="rect" href="exchange.html">Exchange</a> is being
routed.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>threadName</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.3:</strong> Retu
rns the name of the current thread. Can be used for logging
purpose.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>ref:xxx</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.6:</strong> To lookup a bean from the
<a shape="rect" href="registry.html">Registry</a> with the given
id.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>type:name.field</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.11:</strong> To refer to a type or
field by its FQN name. To refer to a field you can append .FIELD_NAME. For
example you can refer to the constant field from Exchange as:
<code>org.apache.camel.Exchange.FILE_NAME</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>null</p></td><td cols
pan="1" rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.3:</strong> represents a
<strong>null</strong></p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>random<em>(value)</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Integer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a random Integer
between 0 (included) and <em>value</em> (excluded)</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p>random<em>(min,max)</em></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Integer</p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a random Integer
between <em>min</em> (included) and <em>max</em>
(excluded)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">collate(group)</td><td colspan="1" rowspan="1"
class="confluenceTd">List</td><td colspan="1
" rowspan="1" class="confluenceTd"><strong>Camel 2.17:</strong> The collate
function iterates the message body and groups the data into sub lists of
specified size. This can be used with the <a shape="rect"
href="splitter.html">Splitter</a> EIP to split a message body and group/batch
the splitted sub message into a group of N sub lists. This method works similar
to the collate method in Groovy.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">messageHistory</td><td colspan="1" rowspan="1"
class="confluenceTd">String</td><td colspan="1" rowspan="1"
class="confluenceTd"><strong>Camel 2.17:</strong> The message history of the
current exchange how it has been routed. This is similar to the route
stack-trace message history the error handler logs in case of an unhandled
exception.</td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><span>messageHistory(false)</span></td><td colspan="1"
rowspan="1" class="confluenceTd">String</td><td colspan="1" rowspan="1" class="c
onfluenceTd"><strong>Camel 2.17:</strong><span> </span>As messageHistory
but without the exchange details (only includes the route strack-trace). This
can be used if you do not want to log sensitive data from the message
itself.</td></tr></tbody></table></div></div><h3
id="Simple-OGNLexpressionsupport">OGNL expression
support</h3><p><strong>Available as of Camel 2.3</strong></p><div
class="confluence-information-macro
confluence-information-macro-information"><span class="aui-icon aui-icon-small
aui-iconfont-info confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Camel's OGNL support is for
invoking methods only. You cannot access fields.<br clear="none"> From
<strong>Camel 2.11.1</strong> onwards we added special support for accessing
the length field of Java arrays.</p></div></div><p>The <a shape="rect"
href="simple.html">Simple</a> and <a shape="rect" href="bean.html">Bean</a>
language now supports a Camel OGNL notation for invoking b
eans in a chain like fashion.<br clear="none"> Suppose the Message IN body
contains a POJO which has a <code>getAddress()</code> method.</p><p>Then you
can use Camel OGNL notation to access the address object:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")