You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by bu...@apache.org on 2016/12/16 10:21:09 UTC

svn commit: r1002926 [2/2] - in /websites/production/camel/content: book-in-one-page.html book-languages-appendix.html cache/main.pageCache camel-219-release.html simple.html

Modified: websites/production/camel/content/camel-219-release.html
==============================================================================
--- websites/production/camel/content/camel-219-release.html (original)
+++ websites/production/camel/content/camel-219-release.html Fri Dec 16 10:21:08 2016
@@ -85,7 +85,7 @@
 	<tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><h1 id="Camel2.19Release-Camel2.19.0Release(currentlyinprogress)">Camel 2.19.0 Release (currently in progress)</h1><div style="padding-right:20px;float:left;margin-left:-20px;"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://camel.apache.org/images/camel-box-small.png" data-image-src="http://camel.apache.org/images/camel-box-small.png"></span></div><div style="min-height:200px">&#160;</div><h2 id="Camel2.19Release-NewandNoteworthy">New and Noteworthy</h2><p>Welcome to the 2.19.0 release which approx XXX issues resolved (new features, improvements and bug fixes such as...)</p><ul><li>The <a shape="rect" href="camel-maven-plugin.html">Camel Maven Plugin</a> now provides the <code>camel:validate</code> goal to parse your Java and XML source code for any Camel routes and report invalid Camel endpoint uri and simple expression errors. You can run this at code time (not run
 time).&#160;</li><li>Introduced a new&#160;<code>camel-catalog-rest</code>&#160;artifact which is a tiny standalone REST API of the CamelCatalog using JAX-RS and Swagger Annotations.</li><li>Added&#160;<code>camel-catalog-rest-app</code>&#160;as a standalone application which used Apache CXF with Jetty to host the Catalog REST API with embedded Swagger UI</li><li>Returning&#160;<code>null</code>&#160;from&#160;<a shape="rect" href="bean.html">Bean</a> should work similar to how&#160;<code>setBody</code>&#160;and&#160;<code>transform</code>&#160;works when they set a&#160;<code>null</code>&#160;body.</li><li>The Camel Spring Boot starter components now have their auto configuration depends on&#160;<code>org.apache.camel.springboot.CamelAutoConfiguration</code> which makes it easier writing unit tests where you can exclude&#160;<code>org.apache.camel.springboot.CamelAutoConfiguration</code> to turn off Camel Spring Boot auto configuration completely.</li><li>Camel now supports OWASP d
 ependency check maven plugin</li><li>Camel-Nats component now supports TLS</li><li>Camel-Nats component now supports explicit flushing (with timeout) of the connection</li><li>Camel-Metrics component now supports Gauge type</li><li><a shape="rect" href="file2.html">File&#160;consumer</a> now supports idempotent-changed and idempotent-rename read lock strategies for clustering.&#160;</li><li>Camel Catalog now supports custom runtime providers that only includes the supported Camel components, languages and data formats running in that container. For example for Karaf or Spring Boot in the camel-catalog-provider-karaf and camel-catalog-provider-springboot.</li><li>The&#160;<a shape="rect" href="https://cwiki.apache.org/confluence/display/WW/bean">bean</a> component will when calling a method that returned an instance of <code>Callable</code>&#160;now call that callable to obtain the chained result. This allows to call Groovy functions/closures etc.</li><li>Failover&#160;<a shape="rect
 " href="load-balancer.html">Load Balancer</a> with inheritErrorHandler=false, now allows Camel's&#160;<a shape="rect" href="error-handler.html">Error Handler</a> to react after the load balancer is exhausted.</li><li><a shape="rect" href="salesforce.html">Salesforce</a> component now supports limits, recent items, approvals and composite API</li><li>Dumping Camel routes as XML now includes custom namespaces which are at xpath expressions etc. Likewise updating Camel routes from XML can now include namespaces which will be associated on xpath expressions.</li><li>Added&#160;<code>RouteIdFactory</code> which can auto assign route ids based on the consumer endpoints to use more sensitible names, instead of route1, route2, etc.</li><li><code>RouteBuilder</code> auto-configuration can now be disabled in <a shape="rect" href="cdi.html">Camel CDI</a></li></ul><p>Fixed these issues</p><ul><li>Fixed starting Camel on Oracle JDK 1.8.0_19 or lower, which would throw an&#160;UnsupportedOperatio
 nException</li><li>Fixed&#160;<a shape="rect" href="hystrix-eip.html">Hystrix EIP</a> to also execute fallback if execution was rejected or short-circuited or other reasons from Hystrix.&#160;</li><li>Fixed adding new routes to running CamelContext and if the new routes would fail to startup, then before these routes would "hang around". Now only succesful started routes are added.</li><li>Adding or removing routes that starts from&#160;<a shape="rect" href="undertow.html">Undertow</a> no longer restart the entire HTTP server</li><li><a shape="rect" href="vm.html">VM</a> endpoint should prepare exchange with the CamelContext from the consumer and not from cached endpoint which can be different</li><li>Fixed a bug when using&#160;<a shape="rect" href="rest-dsl.html">Rest DSL</a> with&#160;<a shape="rect" href="servlet.html">SERVLET</a> could cause a java.io.IOException: Stream closed exception when using <a shape="rect" href="bean.html">Bean</a>&#160;in the route.&#160;</li><li>Fixed
  an issue when using&#160;<code>pipeline</code> in Java DSL not setting up the EIP correctly which could lead to runtime route not as intended.</li><li>Fixed&#160;<a shape="rect" href="dropbox.html">Dropbox</a> to use&#160;<a shape="rect" href="stream-caching.html">Stream caching</a> to avoid reading entire file into memory so Camel can process big files</li><li>Fixed&#160;<code>toD</code> issue with splitting uris when RAW values had + sign</li><li>Fixed Netty double buffer release leak in&#160;<a shape="rect" href="netty4.html">Netty4</a> and&#160;<a shape="rect" href="netty4-http.html">Netty4 HTTP</a></li></ul><h3 id="Camel2.19Release-New">New <a shape="rect" href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a></h3><h3 id="Camel2.19Release-New.1">New <a shape="rect" href="components.html">Components</a></h3><ul><li>camel-bonita -&#160;allow you to communicate with a remote Bonita engine.</li><li>camel-google-pubsub - allow you communicate with Google Cl
 oud Pub/Sub</li></ul><h3 id="Camel2.19Release-NewDSL">New DSL</h3><h3 id="Camel2.19Release-NewAnnotations">New Annotations</h3><h3 id="Camel2.19Release-New.2">New <a shape="rect" href="data-format.html">Data Format</a></h3><h3 id="Camel2.19Release-New.3">New <a shape="rect" href="languages.html">Languages</a></h3><h3 id="Camel2.19Release-New.4">New <a shape="rect" href="examples.html">Examples</a></h3><h3 id="Camel2.19Release-New.5">New <a shape="rect" href="tutorials.html">Tutorials</a></h3><h2 id="Camel2.19Release-APIbreaking">API breaking</h2><ul><li>Camel-spring-LDAP now uses java.util.function.BiFunction&lt;L, Q, S&gt; instead of&#160;org.apache.camel.component.springldap.LdapOperationsFunction&lt;Q, S&gt;</li></ul><h2 id="Camel2.19Release-KnownIssues">Known Issues</h2><h2 id="Camel2.19Release-Importantchangestoconsiderwhenupgrading">Important changes to consider when upgrading</h2><ul><li>Camel now uses Karaf 4.x API and therefore not possible to run on older Karaf versions.</
 li><li><code>camel-blueprint</code>&#160;changed startup behavior to start on Blueprint.CREATED event which would be more `correct` way of startup instead of Blueprint.REGISTERED as before.</li><li>camel-spring-boot now don't include prototype scoped beans when auto scanning for RouteBuilder instances, which is how camel-spring works. You can turn this back using the&#160;includeNonSingletons option.</li><li>camel-spring-javaconfig removed from Karaf features as it was not really supported in OSGi/Karaf.</li></ul><h2 id="Camel2.19Release-GettingtheDistributions">Getting the Distributions</h2><h3 id="Camel2.19Release-BinaryDistributions">Binary Distributions</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Download Link</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PGP Signature file of download</p></th></tr><tr><td colspan="1"
  rowspan="1" class="confluenceTd"><p>Windows Distribution</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dyn/closer.cgi/camel/apache-camel/x.y.x/apache-camel-x.y.x.zip">apache-camel-x.y.x.zip</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dist/camel/apache-camel/x.y.x/apache-camel-x.y.x.zip.asc">apache-camel-x.y.x.zip.asc</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Unix/Linux/Cygwin Distribution</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dyn/closer.cgi/camel/apache-camel/x.y.x/apache-camel-x.y.x.tar.gz">apache-camel-x.y.x.tar.gz</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dist/camel/apache-camel/x.y.x/apache-camel-x.y.x.tar.gz.as
 c">apache-camel-x.y.x.tar.gz.asc</a></p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">The above URLs use redirection</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The above URLs use the Apache Mirror system to redirect you to a suitable mirror for your download. Some users have experienced issues with some versions of browsers (e.g. some Safari browsers). If the download doesn't seem to work for you from the above URL then try using <a shape="rect" class="external-link" href="http://www.mozilla.com/en-US/firefox/" rel="nofollow">FireFox</a></p></div></div><h3 id="Camel2.19Release-SourceDistributions">Source Distributions</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="c
 onfluenceTh"><p>Download Link</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PGP Signature file of download</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Source (zip)</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dyn/closer.cgi/camel/apache-camel/x.y.x/apache-camel-x.y.x-src.zip">apache-camel-x.y.x-src.zip</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dist/camel/apache-camel/x.y.x/apache-camel-x.y.x-src.zip.asc">apache-camel-x.y.x-src.zip.asc</a></p></td></tr></tbody></table></div><h3 id="Camel2.19Release-GettingtheBinariesusingMaven2">Getting the Binaries using Maven 2</h3><p>To use this release in your maven project, the proper dependency configuration that you should use in your <a shape="rect" class="external-link" href="http://maven.apache.org/guides/introduction/introduction-to-th
 e-pom.html">Maven POM</a> is:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div class="wiki-content maincontent"><h1 id="Camel2.19Release-Camel2.19.0Release(currentlyinprogress)">Camel 2.19.0 Release (currently in progress)</h1><div style="padding-right:20px;float:left;margin-left:-20px;"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://camel.apache.org/images/camel-box-small.png" data-image-src="http://camel.apache.org/images/camel-box-small.png"></span></div><div style="min-height:200px">&#160;</div><h2 id="Camel2.19Release-NewandNoteworthy">New and Noteworthy</h2><p>Welcome to the 2.19.0 release which approx XXX issues resolved (new features, improvements and bug fixes such as...)</p><ul><li>The <a shape="rect" href="camel-maven-plugin.html">Camel Maven Plugin</a> now provides the <code>camel:validate</code> goal to parse your Java and XML source code for any Camel routes and report invalid Camel endpoint uri and simple expression errors. You can run this at code time (not run
 time).&#160;</li><li>Introduced a new&#160;<code>camel-catalog-rest</code>&#160;artifact which is a tiny standalone REST API of the CamelCatalog using JAX-RS and Swagger Annotations.</li><li>Added&#160;<code>camel-catalog-rest-app</code>&#160;as a standalone application which used Apache CXF with Jetty to host the Catalog REST API with embedded Swagger UI</li><li>Returning&#160;<code>null</code>&#160;from&#160;<a shape="rect" href="bean.html">Bean</a> should work similar to how&#160;<code>setBody</code>&#160;and&#160;<code>transform</code>&#160;works when they set a&#160;<code>null</code>&#160;body.</li><li>The Camel Spring Boot starter components now have their auto configuration depends on&#160;<code>org.apache.camel.springboot.CamelAutoConfiguration</code> which makes it easier writing unit tests where you can exclude&#160;<code>org.apache.camel.springboot.CamelAutoConfiguration</code> to turn off Camel Spring Boot auto configuration completely.</li><li>Camel now supports OWASP d
 ependency check maven plugin</li><li>Camel-Nats component now supports TLS</li><li>Camel-Nats component now supports explicit flushing (with timeout) of the connection</li><li>Camel-Metrics component now supports Gauge type</li><li><a shape="rect" href="file2.html">File&#160;consumer</a> now supports idempotent-changed and idempotent-rename read lock strategies for clustering.&#160;</li><li>Camel Catalog now supports custom runtime providers that only includes the supported Camel components, languages and data formats running in that container. For example for Karaf or Spring Boot in the camel-catalog-provider-karaf and camel-catalog-provider-springboot.</li><li>The&#160;<a shape="rect" href="https://cwiki.apache.org/confluence/display/WW/bean">bean</a> component will when calling a method that returned an instance of <code>Callable</code>&#160;now call that callable to obtain the chained result. This allows to call Groovy functions/closures etc.</li><li>Failover&#160;<a shape="rect
 " href="load-balancer.html">Load Balancer</a> with inheritErrorHandler=false, now allows Camel's&#160;<a shape="rect" href="error-handler.html">Error Handler</a> to react after the load balancer is exhausted.</li><li><a shape="rect" href="salesforce.html">Salesforce</a> component now supports limits, recent items, approvals and composite API</li><li>Dumping Camel routes as XML now includes custom namespaces which are at xpath expressions etc. Likewise updating Camel routes from XML can now include namespaces which will be associated on xpath expressions.</li><li>Added&#160;<code>RouteIdFactory</code> which can auto assign route ids based on the consumer endpoints to use more sensitible names, instead of route1, route2, etc.</li><li>Add&#160;<code>skip</code> function to&#160;<a shape="rect" href="simple.html">Simple</a> language</li><li><code>RouteBuilder</code> auto-configuration can now be disabled in <a shape="rect" href="cdi.html">Camel CDI</a></li></ul><p>Fixed these issues</p>
 <ul><li>Fixed starting Camel on Oracle JDK 1.8.0_19 or lower, which would throw an&#160;UnsupportedOperationException</li><li>Fixed running <code>mvn camel:run</code>&#160;when using OSGi Blueprint</li><li>Fixed&#160;<a shape="rect" href="hystrix-eip.html">Hystrix EIP</a> to also execute fallback if execution was rejected or short-circuited or other reasons from Hystrix.&#160;</li><li>Fixed adding new routes to running CamelContext and if the new routes would fail to startup, then before these routes would "hang around". Now only succesful started routes are added.</li><li>Adding or removing routes that starts from&#160;<a shape="rect" href="undertow.html">Undertow</a> no longer restart the entire HTTP server</li><li><a shape="rect" href="vm.html">VM</a> endpoint should prepare exchange with the CamelContext from the consumer and not from cached endpoint which can be different</li><li>Fixed a bug when using&#160;<a shape="rect" href="rest-dsl.html">Rest DSL</a> with&#160;<a shape="r
 ect" href="servlet.html">SERVLET</a> could cause a java.io.IOException: Stream closed exception when using <a shape="rect" href="bean.html">Bean</a>&#160;in the route.&#160;</li><li>Fixed an issue when using&#160;<code>pipeline</code> in Java DSL not setting up the EIP correctly which could lead to runtime route not as intended.</li><li>Fixed&#160;<a shape="rect" href="dropbox.html">Dropbox</a> to use&#160;<a shape="rect" href="stream-caching.html">Stream caching</a> to avoid reading entire file into memory so Camel can process big files</li><li>Fixed&#160;<code>toD</code> issue with splitting uris when RAW values had + sign</li><li>Fixed Netty double buffer release leak in&#160;<a shape="rect" href="netty4.html">Netty4</a> and&#160;<a shape="rect" href="netty4-http.html">Netty4 HTTP</a></li></ul><h3 id="Camel2.19Release-New">New <a shape="rect" href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a></h3><h3 id="Camel2.19Release-New.1">New <a shape="rect" hre
 f="components.html">Components</a></h3><ul><li>camel-bonita -&#160;allow you to communicate with a remote Bonita engine.</li><li>camel-google-pubsub - allow you communicate with Google Cloud Pub/Sub</li></ul><h3 id="Camel2.19Release-NewDSL">New DSL</h3><h3 id="Camel2.19Release-NewAnnotations">New Annotations</h3><h3 id="Camel2.19Release-New.2">New <a shape="rect" href="data-format.html">Data Format</a></h3><h3 id="Camel2.19Release-New.3">New <a shape="rect" href="languages.html">Languages</a></h3><h3 id="Camel2.19Release-New.4">New <a shape="rect" href="examples.html">Examples</a></h3><h3 id="Camel2.19Release-New.5">New <a shape="rect" href="tutorials.html">Tutorials</a></h3><h2 id="Camel2.19Release-APIbreaking">API breaking</h2><ul><li>Camel-spring-LDAP now uses java.util.function.BiFunction&lt;L, Q, S&gt; instead of&#160;org.apache.camel.component.springldap.LdapOperationsFunction&lt;Q, S&gt;</li></ul><h2 id="Camel2.19Release-KnownIssues">Known Issues</h2><h2 id="Camel2.19Release-
 Importantchangestoconsiderwhenupgrading">Important changes to consider when upgrading</h2><ul><li>Camel now uses Karaf 4.x API and therefore not possible to run on older Karaf versions.</li><li><code>camel-blueprint</code>&#160;changed startup behavior to start on Blueprint.CREATED event which would be more `correct` way of startup instead of Blueprint.REGISTERED as before.</li><li>camel-spring-boot now don't include prototype scoped beans when auto scanning for RouteBuilder instances, which is how camel-spring works. You can turn this back using the&#160;includeNonSingletons option.</li><li>camel-spring-javaconfig removed from Karaf features as it was not really supported in OSGi/Karaf.</li></ul><h2 id="Camel2.19Release-GettingtheDistributions">Getting the Distributions</h2><h3 id="Camel2.19Release-BinaryDistributions">Binary Distributions</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><t
 h colspan="1" rowspan="1" class="confluenceTh"><p>Download Link</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PGP Signature file of download</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Windows Distribution</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dyn/closer.cgi/camel/apache-camel/x.y.x/apache-camel-x.y.x.zip">apache-camel-x.y.x.zip</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dist/camel/apache-camel/x.y.x/apache-camel-x.y.x.zip.asc">apache-camel-x.y.x.zip.asc</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Unix/Linux/Cygwin Distribution</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dyn/closer.cgi/camel/apache-camel/x.y.x/apache-camel-x.y.x.tar.gz">apache-camel-x.y.x.tar.gz</
 a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dist/camel/apache-camel/x.y.x/apache-camel-x.y.x.tar.gz.asc">apache-camel-x.y.x.tar.gz.asc</a></p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">The above URLs use redirection</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The above URLs use the Apache Mirror system to redirect you to a suitable mirror for your download. Some users have experienced issues with some versions of browsers (e.g. some Safari browsers). If the download doesn't seem to work for you from the above URL then try using <a shape="rect" class="external-link" href="http://www.mozilla.com/en-US/firefox/" rel="nofollow">FireFox</a></p></div></div><h3 id="Camel2.19Release-SourceDistributions">Source Distr
 ibutions</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Download Link</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PGP Signature file of download</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Source (zip)</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dyn/closer.cgi/camel/apache-camel/x.y.x/apache-camel-x.y.x-src.zip">apache-camel-x.y.x-src.zip</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://www.apache.org/dist/camel/apache-camel/x.y.x/apache-camel-x.y.x-src.zip.asc">apache-camel-x.y.x-src.zip.asc</a></p></td></tr></tbody></table></div><h3 id="Camel2.19Release-GettingtheBinariesusingMaven2">Getting the Binaries using Maven 2</h3><p>To use this release in you
 r maven project, the proper dependency configuration that you should use in your <a shape="rect" class="external-link" href="http://maven.apache.org/guides/introduction/introduction-to-the-pom.html">Maven POM</a> is:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[&lt;dependency&gt;
   &lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
   &lt;artifactId&gt;camel-core&lt;/artifactId&gt;

Modified: websites/production/camel/content/simple.html
==============================================================================
--- websites/production/camel/content/simple.html (original)
+++ websites/production/camel/content/simple.html Fri Dec 16 10:21:08 2016
@@ -88,7 +88,7 @@
         <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>Deprecated</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></st
 rong> 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>Fro
 m 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 the syntax which are no longer backwards c
 ompatible. 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><code>${body}</code></strong>.</p><p>A co
 mplex 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>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>
+     <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"><code>skip(number)</code></td><td colspan="1" rowspan="1" class="confluenceTd"><code>Iterator</code></td><td colspan="1" rowspan="1" class="confluenceTd"><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.</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="Simple-OGNLexpressionsupport">OGNL expression support</h3><p><strong>Available as of Camel 2.3</strong></p><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Camel's OGNL support is for invoking methods only. You cannot access fields.<br clear="none"> From <strong>Camel 2.11.1</strong> onwards we added special support for accessing the length field of Java arrays.</p></div></div><p>The <a shape="rect" href="simple.html">Simple</a> and <a shape="rect" href="bean.html">Bean</a> language now supports a Camel OGNL notation for invoking 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;)