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 Sun Jul 12 09:19:43 
2015
@@ -3679,11 +3679,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.rbtoc1436627877342 {padding: 0px;}
-div.rbtoc1436627877342 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1436627877342 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1436692699325 {padding: 0px;}
+div.rbtoc1436692699325 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1436692699325 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1436627877342">
+/*]]>*/</style></p><div class="toc-macro rbtoc1436692699325">
 <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>
@@ -5783,11 +5783,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.rbtoc1436627877996 {padding: 0px;}
-div.rbtoc1436627877996 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1436627877996 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1436692699565 {padding: 0px;}
+div.rbtoc1436692699565 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1436692699565 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style><div class="toc-macro rbtoc1436627877996">
+/*]]>*/</style><div class="toc-macro rbtoc1436692699565">
 <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>
@@ -14687,7 +14687,7 @@ from(&quot;seda:b&quot;).delay(1000).to(
 from(&quot;direct:start&quot;).loadBalance().
 roundRobin().to(&quot;mock:x&quot;, &quot;mock:y&quot;, &quot;mock:z&quot;);
 ]]></script>
-</div></div><p><strong>Using the Spring configuration</strong></p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><strong>Using the Spring configuration</strong><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;camelContext id=&quot;camel&quot; 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
   &lt;route&gt;
     &lt;from uri=&quot;direct:start&quot;/&gt;
@@ -14700,7 +14700,7 @@ roundRobin().to(&quot;mock:x&quot;, &quo
   &lt;/route&gt;
 &lt;/camelContext&gt;
 ]]></script>
-</div></div><p>The above example loads balance requests from 
<strong>direct:start</strong> to one of the available <strong>mock 
endpoint</strong> instances, in this case using a round robin policy.<br 
clear="none"> For further examples of this pattern look at <a shape="rect" 
class="external-link" 
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoundRobinLoadBalanceTest.java?view=markup";>this
 junit test case</a></p><h3 id="BookInOnePage-Failover">Failover</h3><p>The 
<code>failover</code> load balancer is capable of trying the next processor in 
case an <a shape="rect" href="exchange.html">Exchange</a> failed with an 
<code>exception</code> during processing.<br clear="none"> You can constrain 
the <code>failover</code> to activate only when one exception of a list you 
specify occurs. If you do not specify a list any exception will cause fail over 
to occur. This balancer uses the same strategy for matching exceptions as the 
<a shape="rec
 t" href="exception-clause.html">Exception Clause</a> does for the 
<strong>onException</strong>.</p><div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Enable stream 
caching if using streams</p><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>If you use streaming then you 
should enable <a shape="rect" href="stream-caching.html">Stream caching</a> 
when using the failover load balancer. This is needed so the stream can be 
re-read after failing over to the next processor.</p></div></div><p>Failover 
offers the following options:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>
 Description</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>inheritErrorHandler</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>boolean</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> Whether or not the <a 
shape="rect" href="error-handler.html">Error Handler</a> configured on the 
route should be used. Disable this if you want failover to transfer immediately 
to the next endpoint. On the other hand, if you have this option enabled, then 
Camel will first let the <a shape="rect" href="error-handler.html">Error 
Handler</a> try to process the message. The <a shape="rect" 
href="error-handler.html">Error Handler</a> may have been configured to 
redeliver and use delays between attempts. If you have enabled a number of 
redeliveries then Camel will try to redeliver to the <strong>same</strong> 
endpoint, and only fail over to the next endpoint, when the <a s
 hape="rect" href="error-handler.html">Error Handler</a> is 
exhausted.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>maximumFailoverAttempts</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>int</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>-1</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> A value to indicate after X 
failover attempts we should exhaust (give up). Use -1 to indicate never give up 
and continuously try to failover. Use 0 to never failover. And use e.g. 3 to 
failover at most 3 times before giving up. This option can be used whether or 
not roundRobin is enabled or not.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>roundRobin</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>boolean</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> Whether or not the <
 code>failover</code> load balancer should operate in round robin mode or not. 
If not, then it will <strong>always</strong> start from the first endpoint when 
a new message is to be processed. In other words it restart from the top for 
every message. If round robin is enabled, then it keeps state and will continue 
with the next endpoint in a round robin fashion. When using round robin it will 
not <em>stick</em> to last known good endpoint, it will always pick the next 
endpoint to use.</p></td></tr></tbody></table></div><p><strong>Camel 2.2 or 
older behavior</strong><br clear="none"> The current implementation of failover 
load balancer uses simple logic which <strong>always</strong> tries the first 
endpoint, and in case of an exception being thrown it tries the next in the 
list, and so forth. It has no state, and the next message will thus 
<strong>always</strong> start with the first endpoint.</p><p><strong>Camel 2.3 
onwards behavior</strong><br clear="none"> The <code>failover</code>
  load balancer now supports round robin mode, which allows you to failover in 
a round robin fashion. See the <code>roundRobin</code> option.</p><div 
class="confluence-information-macro confluence-information-macro-note"><p 
class="title">Redelivery must be enabled</p><span class="aui-icon 
aui-icon-small aui-iconfont-warning 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>In Camel 2.2 or older the failover 
load balancer requires you have enabled Camel <a shape="rect" 
href="error-handler.html">Error Handler</a> to use redelivery. In Camel 2.3 
onwards this is not required as such, as you can mix and match. See the 
<code>inheritErrorHandler</code> option.</p></div></div><p>Here is a sample to 
failover only if a <code>IOException</code> related exception was 
thrown:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+</div></div><p>The above example loads balance requests from 
<strong>direct:start</strong> to one of the available <strong>mock 
endpoint</strong> instances, in this case using a round robin policy.<br 
clear="none"> For further examples of this pattern look at <a shape="rect" 
class="external-link" 
href="http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RoundRobinLoadBalanceTest.java?view=markup";>this
 junit test case</a></p><h3 id="BookInOnePage-Failover">Failover</h3><p>The 
<code>failover</code> load balancer is capable of trying the next processor in 
case an <a shape="rect" href="exchange.html">Exchange</a> failed with an 
<code>exception</code> during processing.<br clear="none"> You can constrain 
the <code>failover</code> to activate only when one exception of a list you 
specify occurs. If you do not specify a list any exception will cause fail over 
to occur. This balancer uses the same strategy for matching exceptions as the 
<a shape="rec
 t" href="exception-clause.html">Exception Clause</a> does for the 
<strong>onException</strong>.</p><div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">Enable stream 
caching if using streams</p><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>If you use streaming then you 
should enable <a shape="rect" href="stream-caching.html">Stream caching</a> 
when using the failover load balancer. This is needed so the stream can be 
re-read after failing over to the next processor.</p></div></div><p>Failover 
offers the following options:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>
 Description</p></th></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>inheritErrorHandler</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>boolean</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>true</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> Whether or not the <a 
shape="rect" href="error-handler.html">Error Handler</a> configured on the 
route should be used. Disable this if you want failover to transfer immediately 
to the next endpoint. On the other hand, if you have this option enabled, then 
Camel will first let the <a shape="rect" href="error-handler.html">Error 
Handler</a> try to process the message. The <a shape="rect" 
href="error-handler.html">Error Handler</a> may have been configured to 
redeliver and use delays between attempts. If you have enabled a number of 
redeliveries then Camel will try to redeliver to the <strong>same</strong> 
endpoint, and only fail over to the next endpoint, when the <a s
 hape="rect" href="error-handler.html">Error Handler</a> is 
exhausted.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>maximumFailoverAttempts</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>int</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>-1</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> A value to indicate after X 
failover attempts we should exhaust (give up). Use -1 to indicate never give up 
and continuously try to failover. Use 0 to never failover. And use e.g. 3 to 
failover at most 3 times before giving up. This option can be used whether or 
not roundRobin is enabled or not.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>roundRobin</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>boolean</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>false</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.3:</strong> Whether or not the <
 code>failover</code> load balancer should operate in round robin mode or not. 
If not, then it will <strong>always</strong> start from the first endpoint when 
a new message is to be processed. In other words it restart from the top for 
every message. If round robin is enabled, then it keeps state and will continue 
with the next endpoint in a round robin fashion. When using round robin it will 
not <em>stick</em> to last known good endpoint, it will always pick the next 
endpoint to use. <span>You can also enable sticky mode together with round 
robin, if so then it will pick the last known good endpoint </span><span>to use 
when starting the load balancing (instead of using the next when 
starting).</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd">sticky</td><td colspan="1" rowspan="1" 
class="confluenceTd">boolean</td><td colspan="1" rowspan="1" 
class="confluenceTd">false</td><td colspan="1" rowspan="1" 
class="confluenceTd"><strong>Camel 2.16:</strong> Whether or n
 ot the failover load balancer should operate in sticky mode or not. If not, 
then it will always start from the first endpoint when a new message is to be 
processed. In other words it restart from the top for every message. If sticky 
is enabled, then it keeps state and will continue with the last known good 
endpoint. You can also enable sticky mode together with round robin, if so then 
it will pick the last known good endpoint to use when starting the load 
balancing (instead of using the next when 
starting).</td></tr></tbody></table></div><p><strong>Camel 2.2 or older 
behavior</strong><br clear="none"> The current implementation of failover load 
balancer uses simple logic which <strong>always</strong> tries the first 
endpoint, and in case of an exception being thrown it tries the next in the 
list, and so forth. It has no state, and the next message will thus 
<strong>always</strong> start with the first endpoint.</p><p><strong>Camel 2.3 
onwards behavior</strong><br clear="none"> The <
 code>failover</code> load balancer now supports round robin mode, which allows 
you to failover in a round robin fashion. See the <code>roundRobin</code> 
option.</p><div class="confluence-information-macro 
confluence-information-macro-note"><p class="title">Redelivery must be 
enabled</p><span class="aui-icon aui-icon-small aui-iconfont-warning 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>In Camel 2.2 or older the failover 
load balancer requires you have enabled Camel <a shape="rect" 
href="error-handler.html">Error Handler</a> to use redelivery. In Camel 2.3 
onwards this is not required as such, as you can mix and match. See the 
<code>inheritErrorHandler</code> option.</p></div></div><p>Here is a sample to 
failover only if a <code>IOException</code> related exception was 
thrown:</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[
 from(&quot;direct:start&quot;)
     // here we will load balance if IOException was thrown
@@ -14710,7 +14710,7 @@ from(&quot;direct:start&quot;)
     .loadBalance().failover(IOException.class)
         .to(&quot;direct:x&quot;, &quot;direct:y&quot;, &quot;direct:z&quot;);
 ]]></script>
-</div></div><p>You can specify multiple exceptions to failover as the option 
is varargs, for instance:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can specify multiple exceptions to failover as the option is 
varargs, for instance:<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[// enable redelivery so failover can react
 errorHandler(defaultErrorHandler().maximumRedeliveries(5));
 
@@ -14741,7 +14741,7 @@ from(&quot;direct:start&quot;)
     .loadBalance().failover(-1, false, true).
         to(&quot;direct:bad&quot;, &quot;direct:bad2&quot;, 
&quot;direct:good&quot;, &quot;direct:good2&quot;);
 ]]></script>
-</div></div><p>And the same example using Spring XML:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>And the same example using Spring XML:<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;route&gt;
     &lt;from uri=&quot;direct:start&quot;/&gt;
@@ -14813,7 +14813,7 @@ from(&quot;direct:start&quot;)
     .loadBalance(new MyLoadBalancer())
     .to(&quot;mock:x&quot;, &quot;mock:y&quot;, &quot;mock:z&quot;);
 ]]></script>
-</div></div><p>And the same example using XML DSL:</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>And the same example using XML DSL:<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;!-- this is the implementation of our custom load balancer --&gt;
 &lt;bean id=&quot;myBalancer&quot; 
class=&quot;org.apache.camel.processor.CustomLoadBalanceTest$MyLoadBalancer&quot;/&gt;
@@ -14832,7 +14832,7 @@ from(&quot;direct:start&quot;)
   &lt;/route&gt;
 &lt;/camelContext&gt;
 ]]></script>
-</div></div><p>Notice in the XML DSL above we use &lt;custom&gt; which is only 
available in <strong>Camel 2.8</strong> onwards. In older releases you would 
have to do as follows instead:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Notice in the XML DSL above we use &lt;custom&gt; which is only 
available in <strong>Camel 2.8</strong> onwards. In older releases you would 
have to do as follows instead:<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;loadBalance 
ref=&quot;myBalancer&quot;&gt;
         &lt;!-- these are the endpoints to balancer --&gt;
         &lt;to uri=&quot;mock:x&quot;/&gt;
@@ -17678,11 +17678,11 @@ template.send(&quot;direct:alias-verify&
 ]]></script>
 </div></div><p></p><h3 id="BookInOnePage-SeeAlso.28">See Also</h3>
 <ul><li><a shape="rect" href="configuring-camel.html">Configuring 
Camel</a></li><li><a shape="rect" 
href="component.html">Component</a></li><li><a shape="rect" 
href="endpoint.html">Endpoint</a></li><li><a shape="rect" 
href="getting-started.html">Getting Started</a></li></ul><ul><li><a 
shape="rect" href="crypto.html">Crypto</a> Crypto is also available as a <a 
shape="rect" href="data-format.html">Data Format</a></li></ul> <h2 
id="BookInOnePage-CXFComponent">CXF Component</h2><div 
class="confluence-information-macro confluence-information-macro-note"><span 
class="aui-icon aui-icon-small aui-iconfont-warning 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>When using CXF as a consumer, the 
<a shape="rect" href="cxf-bean-component.html">CXF Bean Component</a> allows 
you to factor out how message payloads are received from their processing as a 
RESTful or SOAP web service. This has the potential of using a multitude of 
transports to consume web 
 services. The bean component's configuration is also simpler and provides the 
fastest method to implement web services using Camel and 
CXF.</p></div></div><div class="confluence-information-macro 
confluence-information-macro-tip"><span class="aui-icon aui-icon-small 
aui-iconfont-approve confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>When using CXF in streaming modes 
(see DataFormat option), then also read about <a shape="rect" 
href="stream-caching.html">Stream caching</a>.</p></div></div><p>The 
<strong>cxf:</strong> component provides integration with <a shape="rect" 
href="http://cxf.apache.org";>Apache CXF</a> for connecting to JAX-WS services 
hosted in CXF.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1436627900281 {padding: 0px;}
-div.rbtoc1436627900281 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1436627900281 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1436692705893 {padding: 0px;}
+div.rbtoc1436692705893 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1436692705893 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1436627900281">
+/*]]>*/</style></p><div class="toc-macro rbtoc1436692705893">
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-CXFComponent">CXF Component</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-URIformat">URI format</a></li><li><a shape="rect" 
href="#BookInOnePage-Options">Options</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#BookInOnePage-Thedescriptionsofthedataformats">The descriptions of the 
dataformats</a>
@@ -26961,7 +26961,7 @@ protected RouteBuilder createRouteBuilde
 ]]></script>
 </div></div><p>When using named parameters, Camel will lookup the names from, 
in the given precedence:<br clear="none"> 1. from message body if its a 
<code>java.util.Map</code><br clear="none"> 2. from message headers</p><p>If a 
named parameter cannot be resolved, then an exception is thrown.</p><p>From 
Camel 2.14 onward you can use Simple expressions as parameters 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[sql:select * from table where 
id=:#${property.myId} order by name[?options]]]></script>
-</div></div><p>Notice that the standard <code>?</code> symbol that denotes the 
parameters to an SQL query is substituted with the <code>#</code> symbol, 
because the <code>?</code> symbol is used to specify options for the endpoint. 
The <code>?</code> symbol replacement can be configured on endpoint 
basis.</p><p>You can append query options to the URI in the following format, 
<code>?option=value&amp;option=value&amp;...</code></p><h3 
id="BookInOnePage-Options.75">Options</h3><div 
class="confluenceTableSmall"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>batch</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>
 boolean</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.7.5, 2.8.4 and 2.9:</strong> Execute 
SQL batch update statements. See notes below on how the treatment of the 
inbound message body changes if this is set to 
<code>true</code>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>dataSourceRef</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</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>Deprecated and will be removed in 
Camel 3.0:</strong> Reference to a <code>DataSource</code> to look up in the 
registry. Use <code>dataSource=#theName</code> instead.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>dataSource</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Str
 ing</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.11:</strong> Reference to a 
<code>DataSource</code> to look up in the registry.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>placeholder</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>#</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.4:</strong> Specifies a 
character that will be replaced to <code>?</code> in SQL query. Notice, that it 
is simple <code>String.replaceAll()</code> operation and no SQL parsing is 
involved (quoted strings will also change). This replacement is 
<strong>only</strong> happening if the endpoint is created using the 
<code>SqlComponent</code>. If you manually create the endpoint, then use the 
expected <code>?</code> sign instead.<
 /p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>template.&lt;xxx&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Sets additional options on the Spring 
<code>JdbcTemplate</code> that is used behind the scenes to execute the 
queries. For instance, <code>template.maxRows=10</code>. For detailed 
documentation, see the <a shape="rect" class="external-link" 
href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/JdbcTemplate.html";
 rel="nofollow">JdbcTemplate javadoc</a> documentation.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>allowNamedParameters</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan=
 "1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> Whether 
to allow using named parameters in the queries.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>processingStrategy</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL consumer 
only:</strong> Allows to plugin to use a custom 
<code>org.apache.camel.component.sql.SqlProcessingStrategy</code> to execute 
queries when the consumer has processed the rows/batch.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>prepareStatementStrategy</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> Allows to plugin
  to use a custom 
<code>org.apache.camel.component.sql.SqlPrepareStatementStrategy</code> to 
control preparation of the query and prepared statement.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.delay</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>long</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>500</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> Delay in milliseconds between each 
poll.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.initialDelay</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>long</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>1000</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> 
<strong>SQL consumer only:</strong> Milliseconds before polling 
starts.</p></td><
 /tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.useFixedDelay</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> Set to <code>true</code> to use fixed delay between 
polls, otherwise fixed rate is used. See <a shape="rect" class="external-link" 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html";
 rel="nofollow">ScheduledExecutorService</a> in JDK for 
details.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>maxMessagesPerPoll</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Ca
 mel 2.11:</strong> <strong>SQL consumer only:</strong> An integer value to 
define the maximum number of messages to gather per poll. By default, no 
maximum is set.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.useIterator</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> If <code>true</code> each row returned when polling 
will be processed individually. If <code>false</code> the entire 
<code>java.util.List</code> of data is set as the IN body.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.routeEmptyResultSet</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code>
 </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 
2.11:</strong> <strong>SQL consumer only:</strong> Whether to route a single 
empty <a shape="rect" href="exchange.html">Exchange</a> if there was no data to 
poll.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.onConsume</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</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.11:</strong> <strong>SQL 
consumer only:</strong> After processing each row then this query can be 
executed, if the <a shape="rect" href="exchange.html">Exchange</a> was 
processed successfully, for example to mark the row as processed. The query can 
have parameter.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.onConsumeFailed</code></p></td><td 
colspan="1" rowspan="1" class="confluenc
 eTd"><p><code>String</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.11:</strong> <strong>SQL consumer 
only:</strong> After processing each row then this query can be executed, if 
the <a shape="rect" href="exchange.html">Exchange</a> failed, for example to 
mark the row as failed. The query can have parameter.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.onConsumeBatchComplete</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</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.11:</strong> <strong>SQL consumer 
only:</strong> After processing the entire batch, this query can be executed to 
bulk update rows etc. The query cannot have parameters.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="con
 fluenceTd"><p><code>consumer.expectedUpdateCount</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>-1</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> 
<strong>SQL consumer only:</strong> If using <code>consumer.onConsume</code> 
then this option can be used to set an expected number of rows being updated. 
Typically you may set this to <code>1</code> to expect one row to be 
updated.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.breakBatchOnConsumeFail</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> If using <code>consumer.onConsume</code> and it fails, 
then this o
 ption controls whether to break out of the batch or continue processing the 
next row from the batch.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>alwaysPopulateStatement</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
producer only:</strong> If enabled then the <code>populateStatement</code> 
method from 
<code>org.apache.camel.component.sql.SqlPrepareStatementStrategy</code> is 
always invoked, also if there is no expected parameters to be prepared. When 
this is <code>false</code> then the <code>populateStatement</code> is only 
invoked if there is 1 or more expected parameters to be set; for example this 
avoids reading the message body/headers for SQL queries with no 
parameters.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenc
 eTd"><p><code>separator</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>char</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>,</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11.1:</strong> The separator to use 
when parameter values is taken from message body (if the body is a String 
type), to be inserted at # placeholders. Notice if you use named parameters, 
then a <code>Map</code> type is used instead.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>outputType</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>SelectList</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.0:</strong> Make the 
output of consumer or producer to <code>SelectList</code> as List of Map, or 
<code>SelectOne</code> as single Java object in the following way:<br 
 clear="none"> a) If the query has only single column, then that JDBC Column 
object is returned. (such as <code>SELECT COUNT( * ) FROM PROJECT</code> will 
return a Long object.<br clear="none"> b) If the query has more than one 
column, then it will return a Map of that result.<br clear="none"> c) If the 
<code>outputClass</code> is set, then it will convert the query result into an 
Java bean object by calling all the setters that match the column names. It 
will assume your class has a default constructor to create instance with.<br 
clear="none"> d) If the query resulted in more than one rows, it throws an 
non-unique result exception.</p><p>From <strong>Camel 2.14.1</strong> onwards 
the SelectList also supports mapping each row to a Java object as the SelectOne 
does <span>(only step c)</span>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>outputClass</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</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.0:</strong> 
Specify the full package and class name to use as conversion when 
<code>outputType=SelectOne</code>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>outputHeader</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><code>String</code></td><td colspan="1" 
rowspan="1" class="confluenceTd"><code>null</code></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.15:</strong> To store the 
result as a header instead of the message body. This allows to preserve the 
existing message body as-is.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>parametersCount</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td colspan="1" 
rowspan="1" class="confluenc
 eTd"><p><strong>Camel 2.11.2/2.12.0</strong> If set greater than zero, then 
Camel will use this count value of parameters to replace instead of querying 
via JDBC metadata API. This is useful if the JDBC vendor could not return 
correct parameters count, then user may override instead.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>noop</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.0</strong> If set, will 
ignore the results of the SQL query and use the existing IN message as the OUT 
message for the continuation of 
processing</p></td></tr></tbody></table></div></div><h3 
id="BookInOnePage-Treatmentofthemessagebody">Treatment of the message 
body</h3><p>The SQL component tries to convert the message body to an object of 
<code>java.util.Iterator</code> type and then
  uses this iterator to fill the query parameters (where each query parameter 
is represented by a <code>#</code> symbol (or configured placeholder) in the 
endpoint URI). If the message body is not an array or collection, the 
conversion results in an iterator that iterates over only one object, which is 
the body itself.</p><p>For example, if the message body is an instance of 
<code>java.util.List</code>, the first item in the list is substituted into the 
first occurrence of <code>#</code> in the SQL query, the second item in the 
list is substituted into the second occurrence of <code>#</code>, and so 
on.</p><p>If <code>batch</code> is set to <code>true</code>, then the 
interpretation of the inbound message body changes slightly &#8211; instead of 
an iterator of parameters, the component expects an iterator that contains the 
parameter iterators; the size of the outer iterator determines the batch 
size.</p><h3 id="BookInOnePage-Resultofthequery">Result of the query</h3><p>For 
<code>sele
 ct</code> operations, the result is an instance of 
<code>List&lt;Map&lt;String, Object&gt;&gt;</code> type, as returned by the <a 
shape="rect" class="external-link" 
href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/JdbcTemplate.html#queryForList(java.lang.String,%20java.lang.Object%91%93)"
 rel="nofollow">JdbcTemplate.queryForList()</a> method. For <code>update</code> 
operations, the result is the number of updated rows, returned as an 
<code>Integer</code>.</p><p>By default, the result is placed in the message 
body.&#160; If the outputHeader parameter is set, the result is placed in the 
header.&#160; This is an alternative to using a full message enrichment pattern 
to add headers, it provides a concise syntax for querying a sequence or some 
other small value into a header.&#160; It is convenient to use outputHeader and 
outputType together:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Notice that the standard <code>?</code> symbol that denotes the 
parameters to an SQL query is substituted with the <code>#</code> symbol, 
because the <code>?</code> symbol is used to specify options for the endpoint. 
The <code>?</code> symbol replacement can be configured on endpoint 
basis.</p><p>You can append query options to the URI in the following format, 
<code>?option=value&amp;option=value&amp;...</code></p><h3 
id="BookInOnePage-Options.75">Options</h3><div 
class="confluenceTableSmall"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>batch</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>
 boolean</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.7.5, 2.8.4 and 2.9:</strong> Execute 
SQL batch update statements. See notes below on how the treatment of the 
inbound message body changes if this is set to 
<code>true</code>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>dataSourceRef</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</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>Deprecated and will be removed in 
Camel 3.0:</strong> Reference to a <code>DataSource</code> to look up in the 
registry. Use <code>dataSource=#theName</code> instead.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>dataSource</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>Str
 ing</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.11:</strong> Reference to a 
<code>DataSource</code> to look up in the registry.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>placeholder</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>#</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.4:</strong> Specifies a 
character that will be replaced to <code>?</code> in SQL query. Notice, that it 
is simple <code>String.replaceAll()</code> operation and no SQL parsing is 
involved (quoted strings will also change). This replacement is 
<strong>only</strong> happening if the endpoint is created using the 
<code>SqlComponent</code>. If you manually create the endpoint, then use the 
expected <code>?</code> sign instead.<
 /p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>template.&lt;xxx&gt;</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Sets additional options on the Spring 
<code>JdbcTemplate</code> that is used behind the scenes to execute the 
queries. For instance, <code>template.maxRows=10</code>. For detailed 
documentation, see the <a shape="rect" class="external-link" 
href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/JdbcTemplate.html";
 rel="nofollow">JdbcTemplate javadoc</a> documentation.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>allowNamedParameters</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan=
 "1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> Whether 
to allow using named parameters in the queries.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>processingStrategy</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL consumer 
only:</strong> Allows to plugin to use a custom 
<code>org.apache.camel.component.sql.SqlProcessingStrategy</code> to execute 
queries when the consumer has processed the rows/batch.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>prepareStatementStrategy</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11:</strong> Allows to plugin
  to use a custom 
<code>org.apache.camel.component.sql.SqlPrepareStatementStrategy</code> to 
control preparation of the query and prepared statement.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.delay</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>long</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>500</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> Delay in milliseconds between each 
poll.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.initialDelay</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>long</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>1000</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> 
<strong>SQL consumer only:</strong> Milliseconds before polling 
starts.</p></td><
 /tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.useFixedDelay</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> Set to <code>true</code> to use fixed delay between 
polls, otherwise fixed rate is used. See <a shape="rect" class="external-link" 
href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html";
 rel="nofollow">ScheduledExecutorService</a> in JDK for 
details.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>maxMessagesPerPoll</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Ca
 mel 2.11:</strong> <strong>SQL consumer only:</strong> An integer value to 
define the maximum number of messages to gather per poll. By default, no 
maximum is set.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.useIterator</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> If <code>true</code> each row returned when polling 
will be processed individually. If <code>false</code> the entire 
<code>java.util.List</code> of data is set as the IN body.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.routeEmptyResultSet</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code>
 </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 
2.11:</strong> <strong>SQL consumer only:</strong> Whether to route a single 
empty <a shape="rect" href="exchange.html">Exchange</a> if there was no data to 
poll.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.onConsume</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</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.11:</strong> <strong>SQL 
consumer only:</strong> After processing each row then this query can be 
executed, if the <a shape="rect" href="exchange.html">Exchange</a> was 
processed successfully, for example to mark the row as processed. The query can 
have parameter.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.onConsumeFailed</code></p></td><td 
colspan="1" rowspan="1" class="confluenc
 eTd"><p><code>String</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.11:</strong> <strong>SQL consumer 
only:</strong> After processing each row then this query can be executed, if 
the <a shape="rect" href="exchange.html">Exchange</a> failed, for example to 
mark the row as failed. The query can have parameter.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.onConsumeBatchComplete</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>String</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.11:</strong> <strong>SQL consumer 
only:</strong> After processing the entire batch, this query can be executed to 
bulk update rows etc. The query cannot have parameters.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="con
 fluenceTd"><p><code>consumer.expectedUpdateCount</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>-1</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> 
<strong>SQL consumer only:</strong> If using <code>consumer.onConsume</code> 
then this option can be used to set an expected number of rows being updated. 
Typically you may set this to <code>1</code> to expect one row to be 
updated.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>consumer.breakBatchOnConsumeFail</code></p></td><td
 colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
consumer only:</strong> If using <code>consumer.onConsume</code> and it fails, 
then this o
 ption controls whether to break out of the batch or continue processing the 
next row from the batch.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>alwaysPopulateStatement</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.11:</strong> <strong>SQL 
producer only:</strong> If enabled then the <code>populateStatement</code> 
method from 
<code>org.apache.camel.component.sql.SqlPrepareStatementStrategy</code> is 
always invoked, also if there is no expected parameters to be prepared. When 
this is <code>false</code> then the <code>populateStatement</code> is only 
invoked if there is 1 or more expected parameters to be set; for example this 
avoids reading the message body/headers for SQL queries with no 
parameters.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenc
 eTd"><p><code>separator</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>char</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>,</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.11.1:</strong> The separator to use 
when parameter values is taken from message body (if the body is a String 
type), to be inserted at # placeholders. Notice if you use named parameters, 
then a <code>Map</code> type is used instead.</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>outputType</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>SelectList</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.0:</strong> Make the 
output of consumer or producer to <code>SelectList</code> as List of Map, or 
<code>SelectOne</code> as single Java object in the following way:<br 
 clear="none"> a) If the query has only single column, then that JDBC Column 
object is returned. (such as <code>SELECT COUNT( * ) FROM PROJECT</code> will 
return a Long object.<br clear="none"> b) If the query has more than one 
column, then it will return a Map of that result.<br clear="none"> c) If the 
<code>outputClass</code> is set, then it will convert the query result into an 
Java bean object by calling all the setters that match the column names. It 
will assume your class has a default constructor to create instance with.<br 
clear="none"> d) If the query resulted in more than one rows, it throws an 
non-unique result exception.</p><p>From <strong>Camel 2.14.1</strong> onwards 
the SelectList also supports mapping each row to a Java object as the SelectOne 
does <span>(only step c)</span>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>outputClass</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</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.0:</strong> 
Specify the full package and class name to use as conversion when 
<code>outputType=SelectOne</code>.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>outputHeader</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><code>String</code></td><td colspan="1" 
rowspan="1" class="confluenceTd"><code>null</code></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.15:</strong> To store the 
result as a header instead of the message body. This allows to preserve the 
existing message body as-is.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>parametersCount</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>0</code></p></td><td colspan="1" 
rowspan="1" class="confluenc
 eTd"><p><strong>Camel 2.11.2/2.12.0</strong> If set greater than zero, then 
Camel will use this count value of parameters to replace instead of querying 
via JDBC metadata API. This is useful if the JDBC vendor could not return 
correct parameters count, then user may override instead.</p></td></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>noop</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.12.0</strong> If set, will 
ignore the results of the SQL query and use the existing IN message as the OUT 
message for the continuation of processing</p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><code>useMessageBodyForSql</code></td><td 
colspan="1" rowspan="1" class="confluenceTd"><code>boolean</code></td><td 
colspan="1" rowspan="1" class="confluenceTd"><code>false</
 code></td><td colspan="1" rowspan="1" class="confluenceTd"><strong>Camel 
2.16:</strong> Whether to use the message body as the SQL and then headers for 
parameters. If this option is enabled then the SQL in the uri is not used. The 
SQL parameters must then be provided in a header with the key 
<code>CamelSqlParameters</code>. This option is only for the 
producer.</td></tr></tbody></table></div></div><h3 
id="BookInOnePage-Treatmentofthemessagebody">Treatment of the message 
body</h3><p>The SQL component tries to convert the message body to an object of 
<code>java.util.Iterator</code> type and then uses this iterator to fill the 
query parameters (where each query parameter is represented by a <code>#</code> 
symbol (or configured placeholder) in the endpoint URI). If the message body is 
not an array or collection, the conversion results in an iterator that iterates 
over only one object, which is the body itself.</p><p>For example, if the 
message body is an instance of <code>java.util.List
 </code>, the first item in the list is substituted into the first occurrence 
of <code>#</code> in the SQL query, the second item in the list is substituted 
into the second occurrence of <code>#</code>, and so on.</p><p>If 
<code>batch</code> is set to <code>true</code>, then the interpretation of the 
inbound message body changes slightly &#8211; instead of an iterator of 
parameters, the component expects an iterator that contains the parameter 
iterators; the size of the outer iterator determines the batch size.</p><p>From 
Camel 2.16 onwards you can use the option&#160;<span>useMessageBodyForSql that 
allows to use the message body as the SQL statement, and then the SQL 
parameters must be provided in a header with the 
key&#160;SqlConstants.SQL_PARAMETERS. This allows the SQL component to work 
more dynamic as the SQL query is from the message body.</span></p><h3 
id="BookInOnePage-Resultofthequery">Result of the query</h3><p>For 
<code>select</code> operations, the result is an instance o
 f <code>List&lt;Map&lt;String, Object&gt;&gt;</code> type, as returned by the 
<a shape="rect" class="external-link" 
href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/JdbcTemplate.html#queryForList(java.lang.String,%20java.lang.Object%91%93)"
 rel="nofollow">JdbcTemplate.queryForList()</a> method. For <code>update</code> 
operations, the result is the number of updated rows, returned as an 
<code>Integer</code>.</p><p>By default, the result is placed in the message 
body.&#160; If the outputHeader parameter is set, the result is placed in the 
header.&#160; This is an alternative to using a full message enrichment pattern 
to add headers, it provides a concise syntax for querying a sequence or some 
other small value into a header.&#160; It is convenient to use outputHeader and 
outputType together:</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[from(&quot;jms:order.inbox&quot;)
        .to(&quot;sql:select order_seq.nextval from 
dual?outputHeader=OrderId&amp;outputType=SelectOne&quot;)
        .to(&quot;jms:order.booking&quot;);]]></script>
@@ -26974,20 +26974,20 @@ protected RouteBuilder createRouteBuilde
 db = new EmbeddedDatabaseBuilder()
     
.setType(EmbeddedDatabaseType.DERBY).addScript(&quot;sql/createAndPopulateDatabase.sql&quot;).build();
 ]]></script>
-</div></div><p>The SQL script <code>createAndPopulateDatabase.sql</code> we 
execute looks like as described below:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>The SQL script <code>createAndPopulateDatabase.sql</code> we 
execute looks like as described below:<div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="brush: sql; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 create table projects (id integer primary key, project varchar(10), license 
varchar(5));
 insert into projects values (1, &#39;Camel&#39;, &#39;ASF&#39;);
 insert into projects values (2, &#39;AMQ&#39;, &#39;ASF&#39;);
 insert into projects values (3, &#39;Linux&#39;, &#39;XXX&#39;);
 ]]></script>
-</div></div><p>Then we configure our route and our <code>sql</code> component. 
Notice that we use a <code>direct</code> endpoint in front of the 
<code>sql</code> endpoint. This allows us to send an exchange to the 
<code>direct</code> endpoint with the URI, <code>direct:simple</code>, which is 
much easier for the client to use than the long <code>sql:</code> URI. Note 
that the <code>DataSource</code> is looked up up in the registry, so we can use 
standard Spring XML to configure our <code>DataSource</code>.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div>Then we configure our route and our <code>sql</code> component. 
Notice that we use a <code>direct</code> endpoint in front of the 
<code>sql</code> endpoint. This allows us to send an exchange to the 
<code>direct</code> endpoint with the URI, <code>direct:simple</code>, which is 
much easier for the client to use than the long <code>sql:</code> URI. Note 
that the <code>DataSource</code> is looked up up in the registry, so we can use 
standard Spring XML to configure our <code>DataSource</code>.<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[
 from(&quot;direct:simple&quot;)
     .to(&quot;sql:select * from projects where license = # order by 
id?dataSourceRef=jdbc/myDataSource&quot;)
     .to(&quot;mock:result&quot;);
 ]]></script>
-</div></div><p>And then we fire the message into the <code>direct</code> 
endpoint that will route it to our <code>sql</code> component that queries the 
database.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+</div></div>And then we fire the message into the <code>direct</code> endpoint 
that will route it to our <code>sql</code> component that queries the 
database.<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[
 MockEndpoint mock = getMockEndpoint(&quot;mock:result&quot;);
 mock.expectedMessageCount(1);
@@ -27009,7 +27009,7 @@ Map&lt;?, ?&gt; row = assertIsInstanceOf
 // and we should be able the get the project from the map that should be Linux
 assertEquals(&quot;Linux&quot;, row.get(&quot;PROJECT&quot;));
 ]]></script>
-</div></div><p>We could configure the <code>DataSource</code> in Spring XML as 
follows:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+</div></div>We could configure the <code>DataSource</code> in Spring XML as 
follows:<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;jee:jndi-lookup id=&quot;myDS&quot; 
jndi-name=&quot;jdbc/myDataSource&quot;/&gt;
 ]]></script>
 </div></div><h4 id="BookInOnePage-Usingnamedparameters.1">Using named 
parameters</h4><p><strong>Available as of Camel 2.11</strong></p><p>In the 
given route below, we want to get all the projects from the projects table. 
Notice the SQL query has 2 named parameters, :#lic and :#min.<br clear="none"> 
Camel will then lookup for these parameters from the message body or message 
headers. Notice in the example above we set two headers with constant value<br 
clear="none"> for the named parameters:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
@@ -27044,7 +27044,7 @@ assertEquals(&quot;Linux&quot;, row.get(
 <script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
 &lt;jdbc:embedded-database id=&quot;dataSource&quot; type=&quot;DERBY&quot; 
/&gt;
 ]]></script>
-</div></div><p>And finally we can create our JDBC idempotent repository in the 
spring XML file as well:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
+</div></div>And finally we can create our JDBC idempotent repository in the 
spring XML file as well:<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;bean id=&quot;messageIdRepository&quot; 
class=&quot;org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository&quot;&gt;
        &lt;constructor-arg ref=&quot;dataSource&quot; /&gt;


Reply via email to