Author: buildbot
Date: Fri Oct 14 20:20:46 2016
New Revision: 999443

Log:
Production update by buildbot for camel

Modified:
    websites/production/camel/content/book-in-one-page.html
    websites/production/camel/content/book-languages-appendix.html
    websites/production/camel/content/cache/main.pageCache
    websites/production/camel/content/simple.html

Modified: websites/production/camel/content/book-in-one-page.html
==============================================================================
--- websites/production/camel/content/book-in-one-page.html (original)
+++ websites/production/camel/content/book-in-one-page.html Fri Oct 14 20:20:46 
2016
@@ -4040,11 +4040,11 @@ The tutorial has been designed in two pa
 While not actual tutorials you might find working through the source of the 
various <a shape="rect" href="examples.html">Examples</a> useful.</li></ul>
 
 <h2 id="BookInOnePage-TutorialonSpringRemotingwithJMS">Tutorial on Spring 
Remoting with JMS</h2><p>&#160;</p><div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Thanks</p><span 
class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This tutorial was kindly donated 
to Apache Camel by Martin Gilday.</p></div></div><h2 
id="BookInOnePage-Preface">Preface</h2><p>This tutorial aims to guide the 
reader through the stages of creating a project which uses Camel to facilitate 
the routing of messages from a JMS queue to a <a shape="rect" 
class="external-link" href="http://www.springramework.org"; 
rel="nofollow">Spring</a> service. The route works in a synchronous fashion 
returning a response to the client.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1476051614657 {padding: 0px;}
-div.rbtoc1476051614657 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1476051614657 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1476476305684 {padding: 0px;}
+div.rbtoc1476476305684 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1476476305684 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1476051614657">
+/*]]>*/</style></p><div class="toc-macro rbtoc1476476305684">
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-TutorialonSpringRemotingwithJMS">Tutorial on Spring 
Remoting with JMS</a></li><li><a shape="rect" 
href="#BookInOnePage-Preface">Preface</a></li><li><a shape="rect" 
href="#BookInOnePage-Prerequisites">Prerequisites</a></li><li><a shape="rect" 
href="#BookInOnePage-Distribution">Distribution</a></li><li><a shape="rect" 
href="#BookInOnePage-About">About</a></li><li><a shape="rect" 
href="#BookInOnePage-CreatetheCamelProject">Create the Camel Project</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-UpdatethePOMwithDependencies">Update the POM with 
Dependencies</a></li></ul>
 </li><li><a shape="rect" href="#BookInOnePage-WritingtheServer">Writing the 
Server</a>
@@ -6159,11 +6159,11 @@ So we completed the last piece in the pi
 <p>This example has been removed from <strong>Camel 2.9</strong> onwards. 
Apache Axis 1.4 is a very old and unsupported framework. We encourage users to 
use <a shape="rect" href="cxf.html">CXF</a> instead of Axis.</p></div></div>
 
 <style type="text/css">/*<![CDATA[*/
-div.rbtoc1476051616212 {padding: 0px;}
-div.rbtoc1476051616212 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1476051616212 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1476476307339 {padding: 0px;}
+div.rbtoc1476476307339 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1476476307339 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1476051616212">
+/*]]>*/</style><div class="toc-macro rbtoc1476476307339">
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-TutorialusingAxis1.4withApacheCamel">Tutorial using Axis 
1.4 with Apache Camel</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-Prerequisites">Prerequisites</a></li><li><a shape="rect" 
href="#BookInOnePage-Distribution">Distribution</a></li><li><a shape="rect" 
href="#BookInOnePage-Introduction">Introduction</a></li><li><a shape="rect" 
href="#BookInOnePage-SettinguptheprojecttorunAxis">Setting up the project to 
run Axis</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-Maven2">Maven 2</a></li><li><a shape="rect" 
href="#BookInOnePage-wsdl">wsdl</a></li><li><a shape="rect" 
href="#BookInOnePage-ConfiguringAxis">Configuring Axis</a></li><li><a 
shape="rect" href="#BookInOnePage-RunningtheExample">Running the 
Example</a></li></ul>
@@ -8504,33 +8504,34 @@ result = body * 2 + 1
 &lt;/dependency&gt;
 ]]></script>
 </div></div>
-<h2 id="BookInOnePage-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.h
 tml">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><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 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</strong> be enclosed in either si
 ngle 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 
another ${ } placeholder in an e
 xisting, is not allowed).<br clear="none"> From <strong>Camel 2.9</strong> 
onwards you can nest functions.</p><h3 
id="BookInOnePage-Variables.4">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="confluenceTd"><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 colspan="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="confluenceTd"><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 expr
 ession.</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 converted 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="co
 nfluenceTd"><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="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></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.header.foo</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Object</p></td><td colspan="1" rowspan="1" 
class="confluen
 ceTd"><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" cl
 ass="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" rowsp
 an="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" 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="confluen
 ceTd"><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>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" r
 owspan="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 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>Came
 l 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 cols
 pan="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.SimpleDate
 Format</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" 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>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> 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" r
 owspan="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="confluenceT
 d"><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="confluenceTd"><strong>Camel 2.17:</strong><span>&#160;</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="BookInOnePage-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 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="bord
 er-width: 1px;"><div class="codeContent panelContent pdl">
+<h2 id="BookInOnePage-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="groovy.html">Groovy</a></li><li><a s
 hape="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. 
The&#160;<strong><code>${ }</code></strong> 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 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="confluence-information-macro-body"><p>From Camel 2.2, the <a 
shape="rect" href="file-language.html">File Language</a> is now merged with <a s
 hape="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 
the syntax which are no longer backwards compatible. When using <a shape="rect" 
href="simple.html">Simple</a> language as a <a shape="rect" hr
 ef="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><code>${body}</code></strong>.</p><p>A complex expression must 
use&#160;<strong><code>${ }</code></strong> placeholders, such as: <strong><co
 de>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="BookInOnePage-Variables.4">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>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.</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="c
 onfluenceTd"><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 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 
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></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" row
 span="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> heade
 r.</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> 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" 
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
 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" 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>Deprecated:</strong> refer to 
 >the&#160;<strong><code>foo</code></strong> property on the 
 >exchange.</p></td></tr><tr><td colspan="1" row
 span="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" 
class="confluenceTd"><p><strong>Deprecated:</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><co
 de>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" 
 >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 <stro
 ng><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" c
 
lass="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>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 Groo
 vy.</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 
un-handled 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="BookInOnePage-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 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" 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.address.street}&quot;)
 simple(&quot;${body.address.zip}&quot;)
 ]]></script>
-</div></div><p>Camel understands the shorthand names for getters, 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">
+</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 (<code>?.</code>) to 
avoid NPE if for example the body does NOT have an address</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>You can also use the null safe operator 
(<strong><code>?.</code></strong>) to avoid 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 <code>Map</code> or 
<code>List</code> types, so you can do:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</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 <code>Map</code> based and lookup the 
value with <code>foo</code> as key, and invoke the <code>getName</code> 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 
<strong>must</strong> enclose the key with quotes, for example 'foo 
bar':</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+</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 <code>Map</code> or 
<code>List</code> 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">
+</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 <code>foo</code> then 
you can use the null safe operator to avoid the NPE as shown:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</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 the 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 <code>List</code> 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">
@@ -8538,10 +8539,10 @@ simple(&quot;${body[this.is.foo]}&quot;)
 simple(&quot;${body.address.lines[1]}&quot;)
 simple(&quot;${body.address.lines[2]}&quot;)
 ]]></script>
-</div></div><p>There is a special <code>last</code> 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">
+</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 2nd last you can subtract a number, so we can 
use <code>last-1</code> to indicate this:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>And to get the 2nd last you can subtract a number, so we can 
use <strong><code>last-1</code></strong> to indicate 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 3rd last is of course:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -8550,7 +8551,7 @@ simple(&quot;${body.address.lines[2]}&qu
 </div></div><p>And you can call the size 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> onwards we added support for 
the length field for Java arrays as well, eg:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>From <strong>Camel 2.11.1</strong> we added support for the 
length field for Java arrays as well, eg:</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;};
 exchange.getIn().setBody(lines);
 
@@ -8559,13 +8560,13 @@ simple(&quot;There are ${body.length} li
 </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="BookInOnePage-Operatorsupport">Operator support</h3><p>The 
parser is limited to only support a single operator.</p><p>To enable it the 
left value must be enclosed in ${ }. The syntax is:</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><h3 id="BookInOnePage-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 <code>rightValue</code> can be a String literal 
enclosed in <code>' '</code>, <code>null</code>, a constant value or another 
expression enclosed in ${ }.</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 <strong>must</strong> be 
spaces around the operator.</p></div></div><p>Camel will automatically type 
convert the rightValue type to the leftValue type, so it is able to eg. convert 
a string into a numeric so you can use &gt; comparison for numeric 
values.</p><p>The following operators are supported:</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" c
 lass="confluenceTd"><p>==</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>equals</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">=~</td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong>Camel 2.16:</strong> equals ignore case (will 
ignore case when comparing String values)</td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&gt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>greater than</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&gt;=</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>&lt;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>less than</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&lt;=</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>!=</p></td><td co
 lspan="1" rowspan="1" class="confluenceTd"><p>not equals</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>contains</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>not contains</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>regex</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching against a given regular expression pattern 
defined as a String value</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>not regex</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For not matching against a given regular expression 
pattern defined as a String value</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>in</p></td><td colspan="1" rowspan="1" class="con
 fluenceTd"><p>For matching if in a set of values, each element must be 
separated by comma.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>not in</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching if not in a set of values, each element 
must be separated by comma.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>is</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching if the left hand side type is an 
instanceof the value.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>not is</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>For matching if the left hand side type is not an 
instanceof the value.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>range</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: <code>from..to</code>. From <strong>Camel 
2.9</strong> onwards 
 the range values must be enclosed in single quotes.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>not range</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: <code>from..to</code>. 
From <strong>Camel 2.9</strong> onwards the range values must be enclosed in 
single quotes.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">starts with</td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong>Camel 2.17.1, 2.18</strong><span>: For testing if 
the left hand side string starts with the right hand 
string.</span></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">ends with</td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong>Camel 2.17.1, 2.18</strong>: For testing if the 
left hand side string ends with the right hand 
string.</td></tr></tbody></table></div><p>And the following unary operators can 
be used:</p><div class="table-wrap"><ta
 ble 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>++</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>--</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>\</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9.3 to 2.10.x</strong> To escape a 
value, eg \$, to indicate a $ sign. Special: Use \n for new line, \t for tab, 
and \r for carriage return. <strong>Notice:</stro
 ng> Escaping is <strong>not</strong> supported using the <a shape="rect" 
href="file-language.html">File Language</a>. <strong>Notice:</strong> From 
Camel 2.11 onwards the escape character is no longer support, but replaced with 
the following three special escaping.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p>\n</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>\t</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>\r</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">\}</td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong>Camel 2.18:</strong> To use the } ch
 aracter as text</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>and</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>deprecated</strong> use &amp;&amp; instead. The 
logical and operator is used to group two expressions.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>or</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>deprecated</strong> use || instead. 
The logical or operator is used to group two expressions.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&amp;&amp;</p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.9:</strong> The 
logical and operator is u
 sed to group two expressions.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>||</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 or 
older</strong> the <code>and</code> or <code>or</code> can only be used 
<strong>once</strong> in a simple language expression. From <strong>Camel 
2.5</strong> onwards you can use these operators multiple 
times.</p></div></div><p>The syntax for AND is:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">

[... 286 lines stripped ...]

Reply via email to