Modified: websites/production/camel/content/simple.html
==============================================================================
--- websites/production/camel/content/simple.html (original)
+++ websites/production/camel/content/simple.html Fri Aug 25 09:20:43 2017
@@ -36,17 +36,6 @@
     <![endif]-->
 
 
-  <link href='//camel.apache.org/styles/highlighter/styles/shCoreCamel.css' 
rel='stylesheet' type='text/css' />
-  <link href='//camel.apache.org/styles/highlighter/styles/shThemeCamel.css' 
rel='stylesheet' type='text/css' />
-  <script src='//camel.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script>
-  <script src='//camel.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script>
-  <script src='//camel.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script>
-  <script src='//camel.apache.org/styles/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script>
-  
-  <script type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
     <title>
     Apache Camel: Simple
@@ -86,254 +75,133 @@
        <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 <strong><code>camel-core</code></strong>. 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="groov
 y.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 <strong><code>${body</code>}</strong> placeholders for complex 
expressions where the expression contains constant 
literals.</p><p><strong><span style="color: 
rgb(255,0,0);">Deprecated</span></strong>:&#160;The&#160;<strong><code>${}</code></strong>
 placeholders can be omitted if the expression starts with the token, or if the 
token is only 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 you can also use 
the alternative syntax which uses
 &#160;<strong><code>$simple{}</code></strong> as placeholders. This can be 
used in situations to avoid clashes when using for example Spring property 
placeholder together with Camel.</p></div></div><div 
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 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 
<strong><code>java.lang.Boolean</code></strong> or a 
<code>j<strong>ava.lang.Integer</strong></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="c
 onfluence-information-macro-body"><p>From Camel 2.2, 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 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 th
 e 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</strong> 
be enclosed in either single or double quotes. For example: 
<code>"<strong>${body} == 'Camel'</strong>"</code>. Notice how we have single 
quotes around the literal. The old style of using 
<code>"<strong>body</strong>"</code> and 
<code>"<strong>header.foo</strong>"</code> to refer to the message body and 
header is <strong><code>@deprecated</code></strong>, and it is encouraged to 
always use&#160;<strong><code>${}</code></strong> 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>"<strong>${header.zip} between 
'30000..39999'</strong>"</code>.</p></div></div><p>To get the body of the in 
message: <strong><code>body</code></strong>, or 
<strong><code>in.body</code></strong> or <strong><c
 ode>${body}</code></strong>.</p><p>A complex expression must 
use&#160;<strong><code>${}</code></strong> placeholders, such as: 
<strong><code>Hello ${in.header.name} how are you?</code></strong>.</p><p>You 
can have multiple functions in the same expression: <code>"<strong>Hello 
${in.header.name} this is ${in.header.me} speaking</strong>"</code>. However 
you can <em><strong>not</strong></em> nest functions in Camel 2.8.x or older 
e.g., having another&#160;<strong><code>${}</code></strong> placeholder in an 
existing, is not allowed. From <strong>Camel 2.9</strong> 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><code>camelId</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></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><code>camelContext.<strong>OGNL</strong></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> 
the&#160;<strong><code>CamelContext</code></strong> invoked using a Camel OGNL 
expression.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>collate(<em>group</em>)</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>List</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><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 split sub messages into a group of&#160;<strong><code>N</code></strong> sub 
lists. This method works similar to the collate method in 
Groovy.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchange</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Exchange</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.16:</strong> 
the <a shape="rect" href="exchange.html">Exchange.</a></p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchange.<strong>OGNL</strong></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 
2.16:</strong><span> the </span><a shape="rect" 
href="exchange.html">Exchange</a><span> invoked using a Camel OGNL 
expression.</sp
 an></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchangeId</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> the exchange 
Id.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>id</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></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><code>body</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>in.body</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>body.<strong>OGNL</strong></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>in.body.<strong>OGNL</strong></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>bodyAs(<em>type</em>)</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Type</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> 
Converts the body to the given type deter
 mined by its classname. The converted body can be 
<strong><code>null</code></strong>.</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>bodyAs(<em>type</em>).<strong>OGNL</strong></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><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 converted body can be 
<strong><code>null</code></strong>.</span></p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>mandatoryBodyAs(<em>type</em>)</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Type</code></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 <strong><code>null</code></strong>.</p></td></t
 r><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>mandatoryBodyAs(<em>type</em>).<strong>OGNL</strong></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><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></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.body</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>header.<em>foo</em></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr
 ><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>header[<em>foo</em>]</code></p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to 
 >the input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>headers.<em>foo</em></code></p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>Refer to the 
 >input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>headers[<em>foo</em>]</code></p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to 
 >the input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
 >cols
 pan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><
 td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>header.foo[<em>bar</em>]</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> 
regard input&#160;<strong><code>foo</code></strong> header as a map and perform 
lookup on the map with&#160;<strong><code>bar</code></strong> as 
key.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header.foo[<code><em>bar</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan
 ="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> regard 
input&#160;<strong><code>foo</code></strong> header as a map and perform lookup 
on the map with&#160;<strong><code>bar</code></strong> as 
key.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers.foo[<code><em>bar</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> regard 
input&#160;<strong><code>foo</code></strong> header as a map and perform lookup 
on the map with&#160;<strong><code>bar</code></strong> as 
key.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>header.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> he
 ader and invoke its value using a Camel OGNL expression.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header and invoke its value using 
a Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header and invoke its value using 
a Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.header.<code><em>foo</em></code></code></p><
 /td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.header[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.headers.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.headers[<code><em>foo</em></code>]</code></p></td><td
 c
 olspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> 
refer to the out header <strong><code>foo</code></strong>.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>headerAs(<em>key</em>,<em>type</em>)</code></p></td><td
 colspan="1" rowspan="1" class="confluenceTd"><p><code>Type</code></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><code>headers</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Map</code></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><code>in.headers</code></p></td><td colspan="1" 
rowspan="1" class="confluence
 Td"><p><code>Map</code></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><code>property.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong><span style="color: 
rgb(255,0,0);">Deprecated</span>:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchangeProperty.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span><strong>Camel 2.15:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">
 <p><code>property[<code><em>foo</em></code>]</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong><strong><span style="color: 
rgb(255,0,0);">Deprecated</span></strong>:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span><code>exchangeProperty[<code><em>foo</em></code>]</code></span></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.15:</strong><span> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>property.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
cl
 ass="confluenceTd"><p><strong><strong><span style="color: 
rgb(255,0,0);">Deprecated</span></strong>:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the exchange and invoke 
its value using a Camel OGNL expression.</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>exchangeProperty.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.15:</strong><span> refer to 
the&#160;<strong><code>foo</code></strong> property on the exchange and invoke 
its value using a Camel OGNL expression.</span></p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>sys.<code><em>foo</em></code></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Refer to the system property 
<span><strong><code>foo</code></stro
 ng></span>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>sysenv.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the system 
environment property 
<span><strong><code>foo</code></strong></span>.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exception</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>null</code></strong> if no 
exception set on exchange. Will fallback and grab caught exceptions 
(<strong><code>Exchange.EXCEPTION_CAUGHT</code></strong>) if the Exchange has 
any.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exception.OGNL</code></p></td><td co
 lspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>exception.message</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></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 
(<strong><code>Exchange.EXCEPTION_CAUGHT</code></strong>) if the Exchange has 
any.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exception.stacktrace</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.6.</strong> 
Refer to the&#160;<strong
 ><code>exception.stracktrace</code></strong> on the exchange. Result 
 >is&#160;<strong><code>null</code></strong> if no exception set on exchange. 
 >Will fallback and grab caught exceptions 
 >(<strong><code>Exchange.EXCEPTION_CAUGHT</code></strong>) if the Exchange has 
 >any.</p></td></tr><tr><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>date:<em>command</em>:<em>pattern</em></code></p></td><td
 > colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>Date formatting using the 
 ><strong><code>java.text.SimpleDateFormat</code></strong> patterns. Supported 
 >commands are:&#160;</p><ul><li><p><strong><code>now</code></strong> for 
 >current timestamp.</p></li><li><p><strong><code>in.header.xxx</code></strong> 
 >or&#160;<strong><code>header.xxx</code></strong> to use 
 >the&#160;<strong><code>Date</code></strong> object in 
 >the&#160;<strong><code>IN</code></strong> header with the key 
 ><strong><code>xxx</code></strong>.</p></li
 ><li><p><strong><code>out.header.xxx</code></strong> to use 
 >the&#160;<strong><code>Date</code></strong> object in 
 >the&#160;<strong><code>OUT</code></strong> header with the key 
 ><strong><code>xxx</code></strong>.</p></li></ul></td></tr><tr><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><code>bean:<em>bean 
 >expression</em></code></p></td><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>Object</code></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&#160;<strong><code>?method=methodname</code></strong> 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><code>properties:<em>locations</em>:key</code></p></td><td
 > colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rows
 pan="1" class="confluenceTd"><p><strong><span style="color: 
rgb(255,0,0);">Deprecated</span>: (use properties-location instead) Camel 
2.3:</strong> Lookup a property with the given key. The 
<strong><code>locations</code></strong> 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><code>properties-location:<em>locations:key</em></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></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"><p><code>properties:key:default</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>S
 tring</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><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.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>routeId</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></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><code>threadName</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></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="confluence
 Td"><p><code>ref:<em>xxx</em></code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></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><code>type:name.field</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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 
<strong><code>.FIELD_NAME</code></strong>. For example you can refer to the 
constant field from Exchange as: 
<strong><code>org.apache.camel.Exchange.FILE_NAME</code></strong></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td 
colspan="1" ro
 wspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.3:</strong> represents a 
<strong><code>null</code>.</strong></p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>random(<em>value</em>)</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Integer</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a 
random Integer between&#160;<em><strong><code>0</code></strong></em> (included) 
and <strong><em>value</em></strong> (excluded)</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>random(<em>min</em>,<em>max</em>)</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Integer</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a 
random Integer between <strong><em>min</em></strong> (included) and 
<strong><em>max</em></str
 ong> (excluded)</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>skip(number)</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Iterator</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.19:</strong> 
The skip function iterates the message body and skips the first number of 
items. This can be used with the <a shape="rect" href="splitter.html">Splitter 
EIP</a> to split a message body and skip the first N number of 
items.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>messageHistory</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><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.</p></td></tr><tr><td colspan="1" rowspan="1
 " 
class="confluenceTd"><p><span><code>messageHistory(false)</code></span></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 
2.17:</strong><span>&#160;</span>As&#160;<strong><code>messageHistory</code></strong>
 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.</p></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>: 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 beans in a chain like 
fashion. Suppose the Message&#160;<strong><code>IN</code></strong> body 
contains a POJO which has a <strong><code>getAddress()</code></strong> 
method.</p><p>Then you can use Camel OGNL notation to access the address 
object:</p><div class="code panel pdl" st
 yle="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[simple(&quot;${body.address}&quot;)
-simple(&quot;${body.address.street}&quot;)
-simple(&quot;${body.address.zip}&quot;)
-]]></script>
-</div></div><p>Camel understands the shorthand names for accessors, but you 
can invoke any method or use the real name such as:</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(&quot;${body.address}&quot;)
-simple(&quot;${body.getAddress.getStreet}&quot;)
-simple(&quot;${body.address.getZip}&quot;)
-simple(&quot;${body.doSomething}&quot;)
-]]></script>
-</div></div><p>You can also use the null safe operator 
(<strong><code>?.</code></strong>) to avoid a NPE if for example the body does 
<em>not</em> have an address</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(&quot;${body?.address?.street}&quot;)
-]]></script>
-</div></div><p>It is also possible to index in 
<strong><code>Map</code></strong> or <strong><code>List</code></strong> types, 
so you can do:</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(&quot;${body[foo].name}&quot;)
-]]></script>
-</div></div><p>To assume the body is <strong><code>Map</code></strong> based 
and lookup the value with <strong><code>foo</code></strong> as key, and invoke 
the <strong><code>getName</code></strong> method on that value.</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>If the key has space, then you 
<em><strong>must</strong></em> enclose the key with quotes, for 
example:</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(&quot;${body[&#39;foo 
bar&#39;].name}&quot;)
-]]></script>
-</div></div></div></div><p>You can access the 
<strong><code>Map</code></strong> or <strong><code>List</code></strong> objects 
directly using their key name (with or without dots) :</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(&quot;${body[foo]}&quot;)
-simple(&quot;${body[this.is.foo]}&quot;)
-]]></script>
-</div></div><p>Suppose there was no value with the key 
<strong><code>foo</code></strong> then you can use the null safe operator to 
avoid a NPE as shown:</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(&quot;${body[foo]?.name}&quot;)
-]]></script>
-</div></div><p>You can also access <strong><code>List</code></strong> types, 
for example to get lines from the address you can do:</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(&quot;${body.address.lines[0]}&quot;)
-simple(&quot;${body.address.lines[1]}&quot;)
-simple(&quot;${body.address.lines[2]}&quot;)
-]]></script>
-</div></div><p>There is a special <strong><code>last</code></strong> keyword 
which can be used to get the last value from a list.</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(&quot;${body.address.lines[last]}&quot;)
-]]></script>
-</div></div><p>And to get the penultimate line use subtraction. In this case 
use <strong><code>last-1</code></strong> for this:</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(&quot;${body.address.lines[last-1]}&quot;)
-]]></script>
-</div></div><p>And the third last is of course:</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(&quot;${body.address.lines[last-2]}&quot;)
-]]></script>
-</div></div><p>And you can call the&#160;<strong><code>size</code></strong> 
method on the list with</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(&quot;${body.address.lines.size}&quot;)
-]]></script>
-</div></div><p>From <strong>Camel 2.11.1</strong> we added support for the 
length field for Java arrays as well. Example:</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[String[] lines = new 
String[]{&quot;foo&quot;, &quot;bar&quot;, &quot;cat&quot;};
+<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 <strong><code>camel-core</code></strong>. 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="groov
 y.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 <strong><code>${body</code>}</strong> placeholders for complex 
expressions where the expression contains constant 
literals.</p><p><strong><span style="color: 
rgb(255,0,0);">Deprecated</span></strong>:&#160;The&#160;<strong><code>${}</code></strong>
 placeholders can be omitted if the expression starts with the token, or if the 
token is only itself.</p><parameter ac:name="title">Alternative 
syntax</parameter><rich-text-body><p>From Camel 2.5 you can also use the 
alternative syntax which uses&#160;<strong><code>$simple{}</code></strong> as 
placeholders. This can be used in situations to avoid clashes when using for 
example Spring property placeholder together with Camel.</p></
 rich-text-body><parameter ac:name="title">Configuring result 
type</parameter><rich-text-body><p>From Camel 2.8 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 <strong><code>java.lang.Boolean</code></strong> or 
a <code>j<strong>ava.lang.Integer</strong></code> 
etc.</p></rich-text-body><parameter ac:name="title">File language is now merged 
with Simple language</parameter><rich-text-body><p>From Camel 2.2, 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></rich-text-body><parameter ac:name="title">Simple Language 
Changes in Camel 2.9 onwards</parameter><rich-text-body><p>The <a shape="rect" 
href="simple.html">Simple</a> language have been improved from Camel 2.9 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</strong> 
be enclosed in either single or double quotes. For example: 
<code>"<strong>${body} == 'Camel'</strong>"</code>. Notice how we have single 
quotes around the literal. The old style of using 
<code>"<strong>body</strong>"</code> and 
<code>"<strong>header.foo</strong>"</code> to refer to the message body and 
header is <strong><code>@deprecated</code></strong>, and it is encouraged to 
always use&#160;<strong><code>${}</code></strong> 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>"<strong>${header.zip} between 
'30000..39999'</strong>"</code>.</p></rich-text-body><p>To get the body of the 
in message: <strong><code>body</code></strong>, or 
<strong><code>in.body</code></strong> or 
<strong><code>${body}</code></strong>.</p><p>A complex expression must 
use&#160;<strong><code>${}</code></strong> placeholders, such as: 
<strong><code>Hello ${in.header.name} how are you?</code></strong>.</p><p>You 
can have multiple functions in the same expression: <code>"<strong>Hello 
${in.header.name} this is ${in.header.me} speaking</strong>"</code>. However 
you can <em><strong>not</strong></em> nest functions in Camel 2.8.x or older 
e.g., having another&#160;<strong><code>${}</code></strong> placeholder in an 
existing, is not allowed. From <strong>Camel 2.9</strong> you can nest 
functions.</p><h3 id="Simple-Variables">Variables</h3><parameter 
ac:name="class">confluenceTableSmall</parameter><rich-text-body><div 
class="table-wrap"><table c
 lass="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><code>camelId</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></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><code>camelContext.<strong>OGNL</strong></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> 
the&#160;<strong><code>CamelContext</code></strong> invoked using a Camel OGNL 
expression.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenc
 eTd"><p><code>collate(<em>group</em>)</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>List</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><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 split sub messages into a group of&#160;<strong><code>N</code></strong> sub 
lists. This method works similar to the collate method in 
Groovy.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchange</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Exchange</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.16:</strong> 
the <a shape="rect" href="exchange.html">Exchange.</a></p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>exchange.<strong>OGNL</str
 ong></code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.16:</strong><span> the </span><a 
shape="rect" href="exchange.html">Exchange</a><span> invoked using a Camel OGNL 
expression.</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchangeId</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> the exchange 
Id.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>id</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></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><code>body</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>in.body</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>body.<strong>OGNL</strong></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>in.body.<strong>OGNL</strong></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></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><t
 r><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>bodyAs(<em>type</em>)</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Type</code></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 <strong><code>null</code></strong>.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>bodyAs(<em>type</em>).<strong>OGNL</strong></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><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 converted body can be 
<strong><code>null</code></strong>.</span></p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>mandatoryBodyAs(<em>type</em>)</code></p></td><td 
c
 olspan="1" rowspan="1" class="confluenceTd"><p><code>Type</code></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 <strong><code>null</code></strong>.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>mandatoryBodyAs(<em>type</em>).<strong>OGNL</strong></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><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></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.body</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>header.<em>foo</em></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>header[<em>foo</em>]</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.9.2:</strong> 
refer to the input&#160;<strong><code>foo</code></strong> 
header.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>headers.<em>foo</em></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>
 <code>headers[<em>foo</em>]</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" cl
 
ass="confluenceTd"><p><code>in.headers.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>header.foo[<em>bar</em>]</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> 
regard input&#160;<strong><code>foo</code></strong> header as a map and perform 
lookup o
 n the map with&#160;<strong><code>bar</code></strong> as 
key.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.header.foo[<code><em>bar</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> regard 
input&#160;<strong><code>foo</code></strong> header as a map and perform lookup 
on the map with&#160;<strong><code>bar</code></strong> as 
key.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers.foo[<code><em>bar</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> regard 
input&#160;<strong><code>foo</code></strong> header as a map and perform lookup 
on the map with&#160;<strong><code>bar</code></strong> as 
key.</p></td></tr><tr><td colspan="1" rowspan="1" class="
 
confluenceTd"><p><code>header.<code><em>foo</em></code>.OGNL</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>Object</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.3:</strong> 
refer to the input&#160;<strong><code>foo</code></strong> header and invoke its 
value using a Camel OGNL expression.</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>in.header.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header and invoke its value using 
a Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>in.headers.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan=
 "1" class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the 
input&#160;<strong><code>foo</code></strong> header and invoke its value using 
a Camel OGNL expression.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.header.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.header[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.headers.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" c
 lass="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>out.headers[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.2:</strong> refer to the out header 
<strong><code>foo</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>headerAs(<em>key</em>,<em>type</em>)</code></p></td><td
 colspan="1" rowspan="1" class="confluenceTd"><p><code>Type</code></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><code>headers</code></p></td><td colspan="1" 
rowspan="1" class="
 confluenceTd"><p><code>Map</code></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><code>in.headers</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Map</code></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><code>property.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong><span style="color: 
rgb(255,0,0);">Deprecated</span>:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exchangeProperty.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspa
 n="1" class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span><strong>Camel 2.15:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>property[<code><em>foo</em></code>]</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong><strong><span style="color: 
rgb(255,0,0);">Deprecated</span></strong>:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the 
exchange.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span><code>exchangeProperty[<code><em>foo</em></code>]</code></span></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.15:</strong><span> refer to 
the&#160;<strong><co
 de>foo</code></strong> property on the exchange.</span></p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>property.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong><strong><span style="color: 
rgb(255,0,0);">Deprecated</span></strong>:</strong> refer to 
the&#160;<strong><code>foo</code></strong> property on the exchange and invoke 
its value using a Camel OGNL expression.</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>exchangeProperty.<code><em>foo</em></code>.OGNL</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.15:</strong><span> refer to 
the&#160;<strong><code>foo</code></strong> property on the exchange and invoke 
its value using a Camel OGNL expression.</span></p></td></tr><tr><td 
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>sys.<code><em>foo</em></code></code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Refer to the system property 
<span><strong><code>foo</code></strong></span>.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>sysenv.<code><em>foo</em></code></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> refer to the system 
environment property 
<span><strong><code>foo</code></strong></span>.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exception</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Object</code></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
 ><code>null</code></strong> if no exception set on exchange. Will fallback and 
 >grab caught exceptions 
 >(<strong><code>Exchange.EXCEPTION_CAUGHT</code></strong>) if the Exchange has 
 >any.</p></td></tr><tr><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>exception.OGNL</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>exception.message</code></p></td><td 
 >colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>String</code></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 
 >(<strong><code>Exchange.EXCEPTION_CAUGHT</code></strong>) if the Exchange has 
 >any.<
 /p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>exception.stacktrace</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.6.</strong> 
Refer to the&#160;<strong><code>exception.stracktrace</code></strong> on the 
exchange. Result is&#160;<strong><code>null</code></strong> if no exception set 
on exchange. Will fallback and grab caught exceptions 
(<strong><code>Exchange.EXCEPTION_CAUGHT</code></strong>) if the Exchange has 
any.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>date:<em>command</em>:<em>pattern</em></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Date formatting using the 
<strong><code>java.text.SimpleDateFormat</code></strong> patterns. Supported 
commands are:&#160;</p><ul><li><p><strong><code>now</code></strong> 
 for current 
timestamp.</p></li><li><p><strong><code>in.header.xxx</code></strong> 
or&#160;<strong><code>header.xxx</code></strong> to use 
the&#160;<strong><code>Date</code></strong> object in 
the&#160;<strong><code>IN</code></strong> header with the key 
<strong><code>xxx</code></strong>.</p></li><li><p><strong><code>out.header.xxx</code></strong>
 to use the&#160;<strong><code>Date</code></strong> object in 
the&#160;<strong><code>OUT</code></strong> header with the key 
<strong><code>xxx</code></strong>.</p></li></ul></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>bean:<em>bean 
expression</em></code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Object</code></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&#160;<strong><code>?method=methodname</code></strong> syntax t
 hat 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><code>properties:<em>locations</em>:key</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong><span style="color: 
rgb(255,0,0);">Deprecated</span>: (use properties-location instead) Camel 
2.3:</strong> Lookup a property with the given key. The 
<strong><code>locations</code></strong> 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><code>properties-location:<em>locations:key</em></code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></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"><p><code>properties:key:default</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><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.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>routeId</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></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><code>threadName</code></p></td
 ><td colspan="1" rowspan="1" 
 >class="confluenceTd"><p><code>String</code></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><code>ref:<em>xxx</em></code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><code>Object</code></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><code>type:name.field</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><code>Object</code></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 <strong><code>.FIELD_NAME</code></strong>. For example
  you can refer to the constant field from Exchange as: 
<strong><code>org.apache.camel.Exchange.FILE_NAME</code></strong></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.3:</strong> 
represents a <strong><code>null</code>.</strong></p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>random(<em>value</em>)</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Integer</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a 
random Integer between&#160;<em><strong><code>0</code></strong></em> (included) 
and <strong><em>value</em></strong> (excluded)</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>random(<em>min</em>,
 <em>max</em>)</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Integer</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.16.0: </strong>returns a 
random Integer between <strong><em>min</em></strong> (included) and 
<strong><em>max</em></strong> (excluded)</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>skip(number)</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>Iterator</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.19:</strong> The skip 
function iterates the message body and skips the first number of items. This 
can be used with the <a shape="rect" href="splitter.html">Splitter EIP</a> to 
split a message body and skip the first N number of items.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>messageHistory</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan
 ="1" rowspan="1" class="confluenceTd"><p><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.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span><code>messageHistory(false)</code></span></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 
2.17:</strong><span>&#160;</span>As&#160;<strong><code>messageHistory</code></strong>
 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.</p></td></tr></tbody></table></div></rich-text-body><h3 
id="Simple-OGNLexpressionsupport">OGNL expression 
support</h3><p><strong>Available as of Camel 
2.3</strong></p><rich-text-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>: we added special support for accessing the length field of 
Java arrays.</p></rich-text-body><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 beans in a chain like 
fashion. Suppose the Message&#160;<strong><code>IN</code></strong> body 
contains a POJO which has a <strong><code>getAddress()</code></strong> 
method.</p><p>Then you can use Camel OGNL notation to access the address 
object:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address}")
+simple("${body.address.street}")
+simple("${body.address.zip}")
+</plain-text-body><p>Camel understands the shorthand names for accessors, but 
you can invoke any method or use the real name such as:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address}")
+simple("${body.getAddress.getStreet}")
+simple("${body.address.getZip}")
+simple("${body.doSomething}")
+</plain-text-body><p>You can also use the null safe operator 
(<strong><code>?.</code></strong>) to avoid a NPE if for example the body does 
<em>not</em> have an address</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body?.address?.street}")
+</plain-text-body><p>It is also possible to index in 
<strong><code>Map</code></strong> or <strong><code>List</code></strong> types, 
so you can do:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body[foo].name}")
+</plain-text-body><p>To assume the body is <strong><code>Map</code></strong> 
based and lookup the value with <strong><code>foo</code></strong> as key, and 
invoke the <strong><code>getName</code></strong> method on that 
value.</p><parameter ac:name="">key with 
spaces</parameter><rich-text-body><p>If the key has space, then you 
<em><strong>must</strong></em> enclose the key with quotes, for 
example:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body['foo 
bar'].name}")
+</plain-text-body></rich-text-body><p>You can access the 
<strong><code>Map</code></strong> or <strong><code>List</code></strong> objects 
directly using their key name (with or without dots) :</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body[foo]}")
+simple("${body[this.is.foo]}")
+</plain-text-body><p>Suppose there was no value with the key 
<strong><code>foo</code></strong> then you can use the null safe operator to 
avoid a NPE as shown:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body[foo]?.name}")
+</plain-text-body><p>You can also access <strong><code>List</code></strong> 
types, for example to get lines from the address you can do:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address.lines[0]}")
+simple("${body.address.lines[1]}")
+simple("${body.address.lines[2]}")
+</plain-text-body><p>There is a special <strong><code>last</code></strong> 
keyword which can be used to get the last value from a list.</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address.lines[last]}")
+</plain-text-body><p>And to get the penultimate line use subtraction. In this 
case use <strong><code>last-1</code></strong> for this:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address.lines[last-1]}")
+</plain-text-body><p>And the third last is of course:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address.lines[last-2]}")
+</plain-text-body><p>And you can call 
the&#160;<strong><code>size</code></strong> method on the list 
with</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address.lines.size}")
+</plain-text-body><p>From <strong>Camel 2.11.1</strong> we added support for 
the length field for Java arrays as well. Example:</p><parameter 
ac:name="language">java</parameter><plain-text-body>String[] lines = new 
String[]{"foo", "bar", "cat"};
 exchange.getIn().setBody(lines);
 
-simple(&quot;There are ${body.length} lines&quot;)
-]]></script>
-</div></div><p>And yes you can combine this with the operator support as shown 
below:</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(&quot;${body.address.zip} &gt; 
1000&quot;)
-]]></script>
-</div></div><h3 id="Simple-OperatorSupport">Operator Support</h3><p>The parser 
is limited to only support a single operator. To enable it the left value must 
be enclosed in <strong><code>${}</code></strong>.</p><p>The syntax is:</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[${leftValue} OP rightValue
-]]></script>
-</div></div><p>Where the&#160;<strong><code>rightValue</code></strong> can be 
a&#160;<strong><code>String</code></strong> literal enclosed 
in&#160;<strong><code>' '</code></strong>, <strong><code>null</code></strong>, 
a constant value or another expression enclosed in<strong><code> 
${}</code></strong>.</p><div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Important</p><span 
class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>There 
<em><strong>must</strong></em> be spaces around the 
operator.</p></div></div><p>Camel will automatically type convert 
the&#160;<strong><code>rightValue</code></strong> type to 
the&#160;<strong><code>leftValue</code></strong> type, so it is possible to for 
example, convert a string into a numeric so you can 
use&#160;<strong><code>&gt;</code></strong> comparison for numeric 
values.</p><p>The following operators are support
 ed:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Operator</p></th><th 
colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>==</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Equals.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>=~</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.16:</strong> equals ignore 
case (will ignore case when comparing&#160;<strong><code>String</code></strong> 
values).</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>&gt;</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Greater than.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>&gt;=</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Greater than or 
equals.</p></td></tr><tr><td colspan
 ="1" rowspan="1" class="confluenceTd"><p><code>&lt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Less than.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>&lt;=</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Less than or 
equals.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>!=</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Not equals.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>contains</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>For testing if contains in a 
string based value.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>not contains</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>For testing if not contains in a string 
based value.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>regex</code></p></td><td colspan="1" rowspan="1" 
class="co
 nfluenceTd"><p>For matching against a given regular expression pattern defined 
as a&#160;<strong><code>String</code></strong> value.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>not 
regex</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>For 
not matching against a given regular expression pattern defined as 
a&#160;<strong><code>String</code></strong> value.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>in</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>For matching if in a set of 
values, each element must be separated by comma.</p><p>If you want to include 
an empty value, then it must be defined using double comma, eg 
',,bronze,silver,gold', which<br clear="none">is a set of four values with an 
empty value and then the three medals.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>not in</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>For matchi
 ng if not in a set of values, each element must be separated by 
comma.</p><p>If you want to include an empty value, then it must be defined 
using double comma. Example: 
<strong><code>',,bronze,silver,gold'</code></strong>, which<br clear="none">is 
a set of four values with an empty value and then the three 
medals.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>is</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching if the left hand side type is 
an&#160;<strong><code>instanceof</code></strong> the 
value.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>not is</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching if the left hand side type is not 
an&#160;<strong><code>instanceof</code></strong> the 
value.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>range</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching if the left hand
  side is within a range of values defined as numbers: 
<strong><code>from..to</code></strong>.</p><p>From <strong>Camel 2.9</strong>: 
the range values must be enclosed in single quotes.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>not 
range</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>For 
matching if the left hand side is not within a range of values defined as 
numbers: <strong><code>from..to</code></strong>.</p><p>From <strong>Camel 
2.9</strong>: the range values must be enclosed in single 
quotes.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>starts with</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.17.1, 2.18</strong><span>: 
For testing if the left hand side string starts with the right hand 
string.</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>ends with</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Ca
 mel 2.17.1, 2.18</strong>: For testing if the left hand side string ends with 
the right hand string.</p></td></tr></tbody></table></div><p>And the following 
unary operators can be used:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Operator</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>++</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9:</strong> To increment a 
number by one. The left hand side must be a function, otherwise parsed as 
literal.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>--</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9:</strong> To decrement a number by 
one. The left hand side must be a function, otherwise parsed as 
literal.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><
 p><code>\</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.3 to 2.10.x</strong> To escape a 
value, e.g., <strong><code>\$</code></strong>, to indicate 
a&#160;<strong><code>$</code></strong> sign. Special: 
Use&#160;<strong><code>\n</code></strong> for new 
line,&#160;<strong><code>\t</code></strong> for tab, 
and&#160;<strong><code>\r</code></strong> for carriage 
return.</p><p><strong>Note:</strong> Escaping is <strong>not</strong> supported 
using the <a shape="rect" href="file-language.html"><span style="color: 
rgb(0,0,0);">File Language</span></a><span style="color: 
rgb(0,0,0);">.</span></p><p><strong>Note:</strong> from Camel 2.11, <em>the 
escape character is no longer supported</em>. It has been replaced with the 
following three escape sequences.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>\n</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> To use newline 
character.</p>
 </td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>\t</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> To use tab 
character.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>\r</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> To use carriage return 
character.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>\</code>}</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.18:</strong> To use 
the&#160;<strong><code>}</code></strong> character as 
text.</p></td></tr></tbody></table></div><p>And the following logical operators 
can be used to group expressions:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Operator</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" 
 class="confluenceTd"><p><code>and</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span style="color: 
rgb(255,0,0);"><strong>Deprecated</strong></span>: 
use&#160;<strong><code>&amp;&amp;</code></strong> instead. The logical and 
operator is used to group two expressions.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>or</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span style="color: 
rgb(255,0,0);"><strong>Deprecated</strong></span>: 
use&#160;<strong><code>||</code></strong> instead. The logical or operator is 
used to group two expressions.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>&amp;&amp;</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9:</strong> The logical and 
operator is used to group two expressions.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>||</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd">
 <p><strong>Camel 2.9:</strong> The logical or operator is used to group two 
expressions.</p></td></tr></tbody></table></div><div 
class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Using and,or 
operators</p><span class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>In <strong>Camel 2.4 and 
older</strong> the <strong><code>and</code></strong> or 
<strong><code>or</code></strong> can only be used <strong>once</strong> in a 
simple language expression.</p><p>From <strong>Camel 2.5</strong>: you can use 
these operators multiple times.</p></div></div><p>The syntax 
for&#160;<strong><code>AND</code></strong> is:</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[${leftValue} OP rightValue and ${leftValue} 
OP rightValue 
-]]></script>
-</div></div><p>And the syntax for&#160;<strong><code>OR</code></strong> 
is:</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[${leftValue} OP rightValue or ${leftValue} OP 
rightValue 
-]]></script>
-</div></div><p>Some examples:</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[// exact equals match
-simple(&quot;${in.header.foo} == &#39;foo&#39;&quot;)
- 
+simple("There are ${body.length} lines")
+</plain-text-body><p>And yes you can combine this with the operator support as 
shown below:</p><parameter 
ac:name="language">java</parameter><plain-text-body>simple("${body.address.zip} 
&gt; 1000")
+</plain-text-body><h3 id="Simple-OperatorSupport">Operator Support</h3><p>The 
parser is limited to only support a single operator. To enable it the left 
value must be enclosed in <strong><code>${}</code></strong>.</p><p>The syntax 
is:</p><parameter 
ac:name="language">java</parameter><plain-text-body>${leftValue} OP rightValue

[... 251 lines stripped ...]

Reply via email to