Author: buildbot Date: Fri Mar 17 19:20:29 2017 New Revision: 1008525 Log: Production update by buildbot for camel
Modified: websites/production/camel/content/book-component-appendix.html websites/production/camel/content/book-in-one-page.html websites/production/camel/content/cache/main.pageCache websites/production/camel/content/stringtemplate.html Modified: websites/production/camel/content/book-component-appendix.html ============================================================================== --- websites/production/camel/content/book-component-appendix.html (original) +++ websites/production/camel/content/book-component-appendix.html Fri Mar 17 19:20:29 2017 @@ -895,7 +895,16 @@ from("direct:keypair").to(&quo <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ from("direct:keystore").to("crypto:sign:keystore?keystore=#keystore&alias=bob&password=letmein", "crypto:verify:keystore?keystore=#keystore&alias=bob", "mock:result"); ]]></script> -</div></div>Again in Spring a ref is used to lookup an actual keystore instance.<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div><h4 id="BookComponentAppendix-3)ChangingJCEProviderandAlgorithm">3) Changing JCE Provider and Algorithm</h4><p>Changing the Signature algorithm or the Security provider is a simple matter of specifying their names. You will need to also use Keys that are compatible with the algorithm you choose.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div>Again in Spring a ref is used to lookup an actual keystore instance.<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[ +<route> + <from uri="direct:keystore"/> + <to uri="crypto:sign:keystore?keystore=#keystore&amp;alias=bob&amp;password=letmein" /> + <to uri="crypto:verify:keystore?keystore=#keystore&amp;alias=bob" /> + <to uri="mock:result"/> +</route> +]]></script> +</div></div><h4 id="BookComponentAppendix-3)ChangingJCEProviderandAlgorithm">3) Changing JCE Provider and Algorithm</h4><p>Changing the Signature algorithm or the Security provider is a simple matter of specifying their names. You will need to also use Keys that are compatible with the algorithm you choose.</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[ keyPair = getKeyPair("RSA"); PrivateKey privateKey = keyPair.getPrivate(); @@ -1002,11 +1011,11 @@ template.send("direct:alias-verify& ]]></script> </div></div><p></p><h3 id="BookComponentAppendix-SeeAlso.8">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="BookComponentAppendix-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 cons ume 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.rbtoc1489490263343 {padding: 0px;} -div.rbtoc1489490263343 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1489490263343 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1489778291196 {padding: 0px;} +div.rbtoc1489778291196 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1489778291196 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1489490263343"> +/*]]>*/</style></p><div class="toc-macro rbtoc1489778291196"> <ul class="toc-indentation"><li><a shape="rect" href="#BookComponentAppendix-CXFComponent">CXF Component</a> <ul class="toc-indentation"><li><a shape="rect" href="#BookComponentAppendix-URIformat">URI format</a></li><li><a shape="rect" href="#BookComponentAppendix-Options">Options</a> <ul class="toc-indentation"><li><a shape="rect" href="#BookComponentAppendix-Thedescriptionsofthedataformats">The descriptions of the dataformats</a> @@ -4594,7 +4603,15 @@ $ java -jar camel-jasypt-2.5.0.jar -c de </div></div><p>Which outputs the following result:</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[Decrypted text: tiger ]]></script> -</div></div><p>The idea is then to use those encrypted values in your <a shape="rect" href="properties.html">Properties</a> files. Notice how the password value is encrypted and the value has the tokens surrounding <code>ENC(value here)</code></p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div><h4 id="BookComponentAppendix-ToolingdependenciesforCamel2.5and2.6">Tooling dependencies for Camel 2.5 and 2.6</h4><p>The tooling requires the following JARs in the classpath, which has been enlisted in the <code>MANIFEST.MF</code> file of <code>camel-jasypt</code> with <code>optional/</code> as prefix. Hence why the java cmd above can pickup the needed JARs from the Apache Distribution in the <code>optional</code> directory.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>The idea is then to use those encrypted values in your <a shape="rect" href="properties.html">Properties</a> files. Notice how the password value is encrypted and the value has the tokens surrounding <code>ENC(value here)</code></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[ +# refer to a mock endpoint name by that encrypted password +cool.result=mock:{{cool.password}} + +# here is a password which is encrypted +cool.password=ENC(bsW9uV37gQ0QHFu7KO03Ww==) +]]></script> +</div></div><h4 id="BookComponentAppendix-ToolingdependenciesforCamel2.5and2.6">Tooling dependencies for Camel 2.5 and 2.6</h4><p>The tooling requires the following JARs in the classpath, which has been enlisted in the <code>MANIFEST.MF</code> file of <code>camel-jasypt</code> with <code>optional/</code> as prefix. Hence why the java cmd above can pickup the needed JARs from the Apache Distribution in the <code>optional</code> directory.</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[jasypt-1.6.jar commons-lang-2.4.jar commons-codec-1.4.jar icu4j-4.0.1.jar ]]></script> </div></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Java 1.5 users</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The <code>icu4j-4.0.1.jar</code> is only needed when running on JDK 1.5.</p><p>This JAR is not distributed by Apache Camel and you have to download it manually and copy it to the <code>lib/optional</code> directory of the Camel distribution.<br clear="none"> You can download it from <a shape="rect" class="external-link" href="http://repo2.maven.org/maven2/com/ibm/icu/icu4j/4.0.1/" rel="nofollow">Apache Central Maven repo</a>.</p></div></div><h4 id="BookComponentAppendix-ToolingdependenciesforCamel2.7orbetter">Tooling dependencies for Camel 2.7 or better</h4><p>Jasypt 1.7 onwards is now fully standalone so no additional JARs is needed.</p><h3 id="BookComponentAppendix-URIOptions.5">URI Options</h3><p>The options below are exclusive for the <a shape="rect" href="jasypt.html">Jasypt</a> component.</p><div class="confluenceTableSmall"> @@ -5019,7 +5036,13 @@ We store big input streams (by default, .setBody("select * from projects where license = :?lic and id > :?min order by id") .to("jdbc:myDataSource?useHeadersAsParameters=true") ]]></script> -</div></div><p>You can also store the header values in a <code>java.util.Map</code> and store the map on the headers with the key <code>CamelJdbcParameters</code>.</p><h3 id="BookComponentAppendix-Samples.5">Samples</h3><p>In the following example, we fetch the rows from the customer table.</p><p>First we register our datasource in the Camel registry as <code>testdb</code>:</p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>Then we configure a route that routes to the JDBC component, so the SQL will be executed. Note how we refer to the <code>testdb</code> datasource that was bound in the previous step:<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>You can also store the header values in a <code>java.util.Map</code> and store the map on the headers with the key <code>CamelJdbcParameters</code>.</p><h3 id="BookComponentAppendix-Samples.5">Samples</h3><p>In the following example, we fetch the rows from the customer table.</p><p>First we register our datasource in the Camel registry as <code>testdb</code>:</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[ +JndiRegistry reg = super.createRegistry(); +reg.bind("testdb", db); +return reg; +]]></script> +</div></div>Then we configure a route that routes to the JDBC component, so the SQL will be executed. Note how we refer to the <code>testdb</code> datasource that was bound in the previous step:<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[ // lets add simple route public void configure() throws Exception { @@ -10147,7 +10170,7 @@ private class MyOutputStream extends Out <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("stream:file?fileName=/server/logs/server.log&scanStream=true&scanStreamDelay=1000").to("bean:logService?method=parseLogLine"); ]]></script> </div></div><p>One gotcha with scanStream (pre Camel 2.7) or scanStream + retry is the file will be re-opened and scanned with each iteration of scanStreamDelay. Until NIO2 is available we cannot reliably detect when a file is deleted/recreated.</p><p></p><h3 id="BookComponentAppendix-SeeAlso.61">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> <h2 id="BookComponentAppendix-StringTemplate">String Template</h2><p>The <strong>string-template:</strong> component allows you to process a message using a <a shape="rect" class="external-link" href="http://www.stringtemplate.org/" rel="nofollow">String Template</a>. This can be ideal when using <a shape="rect" href="templating.html">Templating</a> to generate responses for requests.</p><p>Maven users will need to add the following dependency to their <code>pom.xml</code> for this component:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<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> <h2 id="BookComponentAppendix-StringTemplate">String Template</h2><p>The <strong><code>string-template:</code></strong> component allows you to process a message using a <a shape="rect" class="external-link" href="http://www.stringtemplate.org/" rel="nofollow">String Template</a>. This can be ideal when using <a shape="rect" href="templating.html">Templating</a> to generate responses for requests.</p><p>Maven users will need to add the following dependency to their <strong><code>pom.xml</code></strong> for this component:</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[<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-stringtemplate</artifactId> @@ -10155,20 +10178,16 @@ private class MyOutputStream extends Out <!-- use the same version as your Camel core version --> </dependency> ]]></script> -</div></div><h3 id="BookComponentAppendix-URIformat.65">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h3 id="BookComponentAppendix-URIFormat.5">URI Format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[string-template:templateName[?options] ]]></script> -</div></div><p>Where <strong>templateName</strong> is the classpath-local URI of the template to invoke; or the complete URL of the remote template.</p><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><h3 id="BookComponentAppendix-Options.52">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> 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>contentCache</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>false</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Cache for the resource content when its loaded. <br clear="none" class="atl-forced-newline"> Note : as of <strong>Camel 2.9</strong> cached resource content can be cleared via JMX using the endpoint's <code>clearContentCache</code> operation. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>delimiterStart</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>null</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> <st rong>Since Camel 2.11.1</strong>, configuring the variable start delimiter </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>delimiterStop</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>Since Camel 2.11.1</strong>, configuring the variable end delimiter </p></td></tr></tbody></table></div> -</div> +</div></div><p>Where <strong><code>templateName</code></strong> is the classpath-local URI of the template to invoke; or the complete URL of the remote template.</p><p>You can append query options to the URI in the following format, <strong><code>?option=value&option=value&...</code></strong></p><h3 id="BookComponentAppendix-Options.52">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>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>contentCache</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Cache for the resource content when its loaded. <br clear="none" class="atl-forced-newline"> <strong >Note</strong>: as of <strong>Camel 2.9</strong> cached resource content can >be cleared via JMX using the endpoint's ><strong><code>clearContentCache</code></strong> >operation.</p></td></tr><tr><td colspan="1" rowspan="1" >class="confluenceTd"><p><code>delimiterStart</code></p></td><td colspan="1" >rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" >rowspan="1" class="confluenceTd"><p>From<strong> Camel 2.11.1</strong>: >configuring the variable start delimiter</p></td></tr><tr><td colspan="1" >rowspan="1" class="confluenceTd"><p><code>delimiterStop</code></p></td><td >colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td >colspan="1" rowspan="1" class="confluenceTd"><p>From<strong> Camel >2.11.1</strong>: configuring the variable end >delimiter</p></td></tr></tbody></table></div></div> -<h3 id="BookComponentAppendix-Headers.5">Headers</h3><p>Camel will store a reference to the resource in the message header with key, <code>org.apache.camel.stringtemplate.resource</code>. The Resource is an <code>org.springframework.core.io.Resource</code> object.</p><h3 id="BookComponentAppendix-Hotreloading.1">Hot reloading</h3><p>The string template resource is by default hot-reloadable for both file and classpath resources (expanded jar). If you set <code>contentCache=true</code>, Camel loads the resource only once and hot-reloading is not possible. This scenario can be used in production when the resource never changes.</p><h3 id="BookComponentAppendix-StringTemplateAttributes">StringTemplate Attributes</h3><p>Camel will provide exchange information as attributes (just a <code>java.util.Map</code>) to the string template. The Exchange is transfered as:</p><div class="confluenceTableSmall"> -<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> key </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> value </p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>exchange</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The Exchange itself. </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> The headers of the In message. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>camelContext</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The Camel Context. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>request</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The In message. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>in</code> </p></td>< td colspan="1" rowspan="1" class="confluenceTd"><p> The In message. </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> The In message body. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>out</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The Out message (only for InOut message exchange pattern). </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> <code>response</code> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> The Out message (only for InOut message exchange pattern). </p></td></tr></tbody></table></div> -</div> +<h3 id="BookComponentAppendix-Headers.5">Headers</h3><p>Camel will store a reference to the resource in the message header with key, <strong><code>org.apache.camel.stringtemplate.resource</code></strong>. The Resource is an <strong><code>org.springframework.core.io.Resource</code></strong> object.</p><h3 id="BookComponentAppendix-Hot-Reloading">Hot-Reloading</h3><p>The string template resource is by default hot-reloadable for both file and classpath resources (expanded jar). If you set <strong><code>contentCache=true</code></strong>, Camel will load the resource just once, disabling hot-reloading. This scenario can be used in production when the resource never changes.</p><h3 id="BookComponentAppendix-StringTemplateAttributes">StringTemplate Attributes</h3><p>Camel will provide exchange information as attributes (just a <strong><code>java.util.Map</code></strong>) to the string template. The Exchange is transferred as:</p><div class="confluenceTableSmall"><div class="table-wrap"><ta ble class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Key</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Value</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>exchange</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The Exchange itself.</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>The headers of the <strong><code>IN</code></strong> message.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>camelContext</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The Camel Context.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>request</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The <strong><code>IN</code></strong> message.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><cod e>in</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The <strong><code>IN</code></strong> message.</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>The <strong><code>IN</code></strong> message body.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>out</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The <strong><code>OUT</code></strong> message (only for <strong><code>InOut</code></strong> message exchange pattern).</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>response</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The <strong><code>OUT</code></strong> message (only for <strong><code>InOut</code></strong> message exchange pattern).</p></td></tr></tbody></table></div></div> -<p>Since Camel 2.14, you can define the custom context map by setting the message header "<strong><span style="line-height: 1.4285715;">CamelStringTemplateVariableMap</span></strong><span style="line-height: 1.4285715;">" just like the below code.</span></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<p>From <strong>Camel 2.14</strong>: you can define the custom context map by setting the message header <strong><code>CamelStringTemplateVariableMap</code></strong>, as shown below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[Map<String, Object> variableMap = new HashMap<String, Object>(); Map<String, Object> headersMap = new HashMap<String, Object>(); headersMap.put("name", "Willem"); @@ -10179,10 +10198,10 @@ exchange.getIn().setHeader("CamelSt ]]></script> </div></div><h3 id="BookComponentAppendix-Samples.13">Samples</h3><p>For example you could use a string template as follows in order to formulate a response to a message:</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("activemq:My.Queue"). - to("string-template:com/acme/MyResponse.tm"); +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("activemq:My.Queue") + .to("string-template:com/acme/MyResponse.tm"); ]]></script> -</div></div><h3 id="BookComponentAppendix-TheEmailSample.1">The Email Sample</h3><p>In this sample we want to use a string template to send an order confirmation email. The email template is laid out in <code>StringTemplate</code> as:<br clear="none"> This example works for <strong>camel 2.11.0</strong>. If your camel version is less than 2.11.0, the variables should be started and ended with $.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h3 id="BookComponentAppendix-TheEmailSample.1">The Email Sample</h3><p>In this sample we want to use a string template to send an order confirmation email. The email template is laid out in <strong><code>StringTemplate</code></strong> as:<br clear="none"> This example works for <strong>camel 2.11.0</strong>. If your camel version is less than <strong>2.11.0</strong>, the variables should be started and ended with <strong><code>$</code></strong>.</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[Dear <headers.lastName>, <headers.firstName> Thanks for the order of <headers.item>. @@ -10221,7 +10240,7 @@ protected RouteBuilder createRouteBuilde }; } ]]></script> -</div></div><p></p><h3 id="BookComponentAppendix-SeeAlso.62">See Also</h3> +</div></div><h3 id="BookComponentAppendix-SeeAlso.62">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> <h2 id="BookComponentAppendix-SQLComponent">SQL Component</h2><p>The <strong>sql:</strong> component allows you to work with databases using JDBC queries. The difference between this component and <a shape="rect" href="jdbc.html">JDBC</a> component is that in case of SQL the query is a property of the endpoint and it uses message payload as parameters passed to the query.</p><p>This component uses <code><strong>spring-jdbc</strong></code> behind the scenes for the actual SQL handling.</p><p>Maven users will need to add the following dependency to their <code>pom.xml</code> for this component:</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[<dependency> <groupId>org.apache.camel</groupId> @@ -10230,7 +10249,7 @@ protected RouteBuilder createRouteBuilde <!-- use the same version as your Camel core version --> </dependency> ]]></script> -</div></div><p>The SQL component also supports:</p><ul class="alternate"><li>a JDBC based repository for the <a shape="rect" href="idempotent-consumer.html">Idempotent Consumer</a> EIP pattern. See further below.</li><li>a JDBC based repository for the <a shape="rect" href="aggregator2.html">Aggregator</a> EIP pattern. See further below.</li></ul><h3 id="BookComponentAppendix-URIformat.66">URI format</h3><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>From Camel 2.11 onwards this component can create both consumer (e.g. <code>from()</code>) and producer endpoints (e.g. <code>to()</code>).</p><p>In previous versions, it could only act as a producer.</p></div></div><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluen ce-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This component can be used as a <a shape="rect" class="external-link" href="http://camel.apache.org/transactional-client.html">Transactional Client</a>.</p></div></div><p>The SQL component uses the following endpoint URI notation:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>The SQL component also supports:</p><ul class="alternate"><li>a JDBC based repository for the <a shape="rect" href="idempotent-consumer.html">Idempotent Consumer</a> EIP pattern. See further below.</li><li>a JDBC based repository for the <a shape="rect" href="aggregator2.html">Aggregator</a> EIP pattern. See further below.</li></ul><h3 id="BookComponentAppendix-URIformat.65">URI format</h3><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>From Camel 2.11 onwards this component can create both consumer (e.g. <code>from()</code>) and producer endpoints (e.g. <code>to()</code>).</p><p>In previous versions, it could only act as a producer.</p></div></div><div class="confluence-information-macro confluence-information-macro-information"><span class="aui-icon aui-icon-small aui-iconfont-info confluen ce-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This component can be used as a <a shape="rect" class="external-link" href="http://camel.apache.org/transactional-client.html">Transactional Client</a>.</p></div></div><p>The SQL component uses the following endpoint URI notation:</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=# order by name[?options] ]]></script> </div></div><p>From Camel 2.11 onwards you can use named parameters by using :<code>#name_of_the_parameter</code> style as shown:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -10395,7 +10414,7 @@ template.requestBodyAndHeader("dire <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>]]></script> -</div></div><h3 id="BookComponentAppendix-URIFormat.5">URI Format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h3 id="BookComponentAppendix-URIFormat.6">URI Format</h3><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[telegram:type/authorizationToken[?options]]]></script> </div></div><h3 id="BookComponentAppendix-Options.54">Options</h3><p>The Telegram component has no options. However, the Telegram component does support 24 endpoint options, which are listed below:</p><div class="confluenceTableSmall"><div><div class="sect2"><div class="sect3"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Name</th><th colspan="1" rowspan="1" class="confluenceTh">Group</th><th colspan="1" rowspan="1" class="confluenceTh">Default</th><th colspan="1" rowspan="1" class="confluenceTh">Description</th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>authorizationToken</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>common</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><strong>Required</strong> The authorization token for using the bot (ask the BotFather) e.g., <strong><code>654321531:HGF_dTra456323dHuOedsE343211fqr3t-H</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>type</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>common</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><strong>Required</strong> The endpoint type. Currently only the <strong><code>bots</code></strong> type is supported.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>bridgeErrorHandler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>consumer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Allows for bridging t he consumer to the Camel routing Error Handler which mean any exceptions occurred while the consumer is trying to pickup incoming messages or the likes will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the <strong><code>org.apache.camel.spi.ExceptionHandler</code></strong> to deal with exceptions that will be logged at <strong><code>WARN</code>/<code>ERROR</code></strong> level and ignored.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>limit</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>consumer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>100</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Limit on the number of updates that can be received in a single polling request.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>sendEmptyMessageWhenIdle</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><code>consumer</code></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>timeout</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><code>consumer</code></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>30</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Timeout in seconds for long polling. Put <strong><code>0</code></strong> for short polling or a bigger number for long polling. Long polling produces shorter response time.</p></td></tr><tr><td colspan="1" r owspan="1" class="confluenceTd"><p class="tableblock"><code>exceptionHandler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>consumer</code> </p><p class="tableblock">(advanced)</p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">To let the consumer use a custom <strong><code>ExceptionHandler</code></strong>. </p><p class="tableblock"><strong>Note</strong>: if the option <strong><code>bridgeErrorHandler</code></strong> is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at <strong><code>WARN</code>/<code>ERROR</code></strong> level and ignored.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>pollStrategy</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>consumer</code> </p><p class="tablebloc k">(advanced)</p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">A pluggable <strong><code>org.apache.camel.PollingConsumerPollingStrategy</code></strong> allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>chatId</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>producer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">The identifier of the chat that will receive the produced messages. Chat ids can be first obtained from incoming messages e.g., when a telegram user starts a conversation with a bot its client sends automatically a 60;<strong><code>/start</code></strong> message containing the chat id. It is an optional parameter as the chat id can be set dynamically for each outgoing message (using body or headers).</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>exchangePattern</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>advanced</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>InOnly</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Sets the default exchange pattern when creating an exchange</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>synchronous</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>advanced</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>false</code></p></td><td colspan="1" rowspan="1" clas s="confluenceTd"><p class="tableblock">Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>backoffErrorThreshold</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">The number of subsequent error polls (failed due some error) that should happen before the <strong><code>backoffMultiplier</code></strong> should kick-in.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>backoffIdleThreshold</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">The number of subsequent idle polls that should happen before the <strong><code>backoffMultiplier</code></strong> should kick-in.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>backoffMultiplier</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">To let the scheduled polling consumer back-off if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then <strong><code>backoffIdleThreshold</code></strong> and/or <strong><code>backoffErrorThreshold</code></strong> must also be configured.</p></td></tr><tr><td colspan="1" rowspan="1 " class="confluenceTd"><p class="tableblock"><code>delay</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>500</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Milliseconds before the next poll. You can also specify time values using units such as:</p><ul><li class="tableblock"><strong><code>60s</code></strong> (60 seconds)</li><li class="tableblock"><strong><code>5m30s</code></strong> (5 minutes and 30 seconds)</li><li class="tableblock"><strong><code>1h</code></strong> (1 hour)</li></ul></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>greedy</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>false</code></p></td><td colsp an="1" rowspan="1" class="confluenceTd"><p class="tableblock">If greedy is enabled then the <strong><code>ScheduledPollConsumer</code></strong> will run immediately again if the previous run polled 1 or more messages.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>initialDelay</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>1000</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Milliseconds before the first poll starts. You can also specify time values using units such as:</p><ul><li class="tableblock"><strong><code>60s</code></strong> (60 seconds)</li><li class="tableblock"><strong><code>5m30s</code></strong> (5 minutes and 30 seconds)</li><li class="tableblock"><strong><code>1h</code></strong> (1 hour)</li></ul></td></tr><tr><td colspan="1" rowspan="1 " class="confluenceTd"><p class="tableblock"><code>runLoggingLevel</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>TRACE</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduledExecutorService</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.</p></td></tr ><tr><td colspan="1" rowspan="1" class="confluenceTd"><p >class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" >class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td >colspan="1" rowspan="1" class="confluenceTd"><p >class="tableblock"><code>none</code></p></td><td colspan="1" rowspan="1" >class="confluenceTd"><p class="tableblock">To use a cron scheduler from >either camel-spring or <strong><code>camel-quartz2</code></strong> >component</p></td></tr><tr><td colspan="1" rowspan="1" >class="confluenceTd"><p >class="tableblock"><code>schedulerProperties</code></p></td><td colspan="1" >rowspan="1" class="confluenceTd"><p >class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" >class="confluenceTd"> </td><td colspan="1" rowspan="1" >class="confluenceTd"><p class="tableblock">To configure additional properties >when using a custom scheduler or any of the Quartz2 Spring based >scheduler.</p></td></tr><tr><td colspan="1" row span="1" class="confluenceTd"><p class="tableblock"><code>startScheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Whether the scheduler should be auto started.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>timeUnit</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>ms</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Time unit for <strong><code>initialDelay</code></strong> and delay options.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>useFixedDelay</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>scheduler</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock"><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p class="tableblock">Controls if fixed delay or fixed rate is used.</p><p class="tableblock">See <strong><code>ScheduledExecutorService</code></strong> in JDK for details.</p></td></tr></tbody></table></div></div></div></div></div> @@ -10463,7 +10482,7 @@ template.requestBodyAndHeader("dire <!-- use the same version as your Camel core version --> </dependency> ]]></script> -</div></div><p>From <strong>Camel 2.9</strong>: the <a shape="rect" href="test.html">Test</a> component is provided directly in <strong><code>camel-core</code></strong>.</p><h3 id="BookComponentAppendix-URIformat.67">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>From <strong>Camel 2.9</strong>: the <a shape="rect" href="test.html">Test</a> component is provided directly in <strong><code>camel-core</code></strong>.</p><h3 id="BookComponentAppendix-URIformat.66">URI format</h3><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[test:expectedMessagesEndpointUri ]]></script> </div></div><p>Where <strong><code>expectedMessagesEndpointUri</code></strong> refers to some other <a shape="rect" href="component.html">Component</a> URI that the expected message bodies are pulled from before starting the test.</p><h3 id="BookComponentAppendix-URIOptions.10">URI Options</h3><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>anyOrder</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.17:</strong> Whether the expected messages should arrive in the same order, or in any order.</p></td></tr><tr><td colspan="1" rowspan="1" class="con fluenceTd"><p><code>delimiter</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>\n|\r</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.17:</strong> The delimiter to use when <strong><code>split=true</code></strong>. The delimiter can be a regular expression.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>split</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.17:</strong> If <strong><code>true</code></strong> messages loaded from the test endpoint will be split using the defined <strong><code>delimiter</code></strong>.For example to use a <strong><code>file</code></strong> endpoint to load a file where each line is an expected message. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>timeout</code></p></td><td colspan="1" rowspan="1" class="co nfluenceTd"><p><code>2000</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> The timeout to use when polling for message bodies from the URI.</p></td></tr></tbody></table></div></div> @@ -10474,7 +10493,7 @@ template.requestBodyAndHeader("dire .to("test:file://data/expectedOutput?noop=true"); ]]></script> </div></div><p>If your test then invokes the <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#assertIsSatisfied(org.apache.camel.CamelContext)">MockEndpoint.assertIsSatisfied(camelContext) method</a>, your test case will perform the necessary assertions.</p><p>To see how you can set other expectations on the test endpoint, see the <a shape="rect" href="mock.html">Mock</a> component.</p><p></p><h3 id="BookComponentAppendix-SeeAlso.64">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="spring-testing.html">Spring Testing</a></li></ul> <h2 id="BookComponentAppendix-TimerComponent">Timer Component</h2><p>The <strong>timer:</strong> component is used to generate message exchanges when a timer fires You can only consume events from this endpoint.</p><h3 id="BookComponentAppendix-URIformat.68">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<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="spring-testing.html">Spring Testing</a></li></ul> <h2 id="BookComponentAppendix-TimerComponent">Timer Component</h2><p>The <strong>timer:</strong> component is used to generate message exchanges when a timer fires You can only consume events from this endpoint.</p><h3 id="BookComponentAppendix-URIformat.67">URI format</h3><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[timer:name[?options] ]]></script> </div></div><p>Where <code>name</code> is the name of the <code>Timer</code> object, which is created and shared across endpoints. So if you use the same name for all your timer endpoints, only one <code>Timer</code> object and thread will be used.</p><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><p><strong>Note:</strong> The IN body of the generated exchange is <code>null</code>. So <code>exchange.getIn().getBody()</code> returns <code>null</code>.</p><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Advanced Scheduler</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>See also the <a shape="rect" href="quartz.html">Quartz</a> component that supports much more advanced scheduling.</p></div></div><div class="confluence-information-macro confluence-information-macro- tip"><p class="title">Specify time in human friendly format</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>In <strong>Camel 2.3</strong> onwards you can specify the time in <a shape="rect" href="how-do-i-specify-time-period-in-a-human-friendly-syntax.html">human friendly syntax</a>.</p></div></div><h3 id="BookComponentAppendix-Options.55">Options</h3><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>time</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A <code>ja va.util.Date</code> the <strong>first</strong> event should be generated. If using the URI, the pattern expected is: <code>yyyy-MM-dd HH:mm:ss</code> or <code>yyyy-MM-dd'T'HH:mm:ss</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>pattern</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Allows you to specify a custom <code>Date</code> pattern to use for setting the time option using URI syntax.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>period</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>1000</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If greater than 0, generate periodic events every <code>period</code> milliseconds.<br clear="none">You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour).</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>delay</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><span style="font-family: monospace;">0</span> / <code>1000</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The number of milliseconds to wait before the first event is generated. Should not be used in conjunction with the <code>time</code> option.<br clear="none"><span>You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour).</span> <br clear="none">Before <strong>Camel 2.11</strong> the default value is 0<br clear="none">From <strong>Camel 2.11</strong><span> the <span>default value is </span><code>1000<br clear="none"></code></span>From<strong> Camel 2.17 it </strong>is possible to specify a negative delay. In this scenario the timer will generate and fire events as soon as possible.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>fixedRate </code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events take place at approximately regular intervals, separated by the specified period.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>daemon</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Specifies whether or not the thread associated with the timer endpoint runs as a daemon.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>repeatCount</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>Camel 2.8:</strong> Specifies a maximum limit of number of fires. So if you set it to 1, the timer will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever.</p></td></tr></tbody></table></div></div> @@ -10507,7 +10526,7 @@ template.requestBodyAndHeader("dire </route> ]]></script> </div></div><p></p><h3 id="BookComponentAppendix-SeeAlso.65">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="quartz.html">Quartz</a></li></ul> <h2 id="BookComponentAppendix-ValidationComponent">Validation Component</h2><p>The Validation component performs XML validation of the message body using the JAXP Validation API and based on any of the supported XML schema languages, which defaults to <a shape="rect" class="external-link" href="http://www.w3.org/XML/Schema" rel="nofollow">XML Schema</a></p><p>Note that the <a shape="rect" href="jing.html">Jing</a> component also supports the following useful schema languages:</p><ul><li><a shape="rect" class="external-link" href="http://relaxng.org/compact-tutorial-20030326.html" rel="nofollow">RelaxNG Compact Syntax</a></li><li><a shape="rect" class ="external-link" href="http://relaxng.org/" rel="nofollow">RelaxNG XML Syntax</a></li></ul><p>The <a shape="rect" href="msv.html">MSV</a> component also supports <a shape="rect" class="external-link" href="http://relaxng.org/" rel="nofollow">RelaxNG XML Syntax</a>.</p><h3 id="BookComponentAppendix-URIformat.69">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<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="quartz.html">Quartz</a></li></ul> <h2 id="BookComponentAppendix-ValidationComponent">Validation Component</h2><p>The Validation component performs XML validation of the message body using the JAXP Validation API and based on any of the supported XML schema languages, which defaults to <a shape="rect" class="external-link" href="http://www.w3.org/XML/Schema" rel="nofollow">XML Schema</a></p><p>Note that the <a shape="rect" href="jing.html">Jing</a> component also supports the following useful schema languages:</p><ul><li><a shape="rect" class="external-link" href="http://relaxng.org/compact-tutorial-20030326.html" rel="nofollow">RelaxNG Compact Syntax</a></li><li><a shape="rect" class ="external-link" href="http://relaxng.org/" rel="nofollow">RelaxNG XML Syntax</a></li></ul><p>The <a shape="rect" href="msv.html">MSV</a> component also supports <a shape="rect" class="external-link" href="http://relaxng.org/" rel="nofollow">RelaxNG XML Syntax</a>.</p><h3 id="BookComponentAppendix-URIformat.68">URI format</h3><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[validator:someLocalOrRemoteResource ]]></script> </div></div><p>Where <strong>someLocalOrRemoteResource</strong> is some URL to a local resource on the classpath or a full URL to a remote resource or resource on the file system which contains the XSD to validate against. For example:</p><ul><li><code>msv:org/foo/bar.xsd</code></li><li><code>msv:file:../foo/bar.xsd</code></li><li><code>msv:<a shape="rect" class="external-link" href="http://acme.com/cheese.xsd" rel="nofollow">http://acme.com/cheese.xsd</a></code></li><li><code>validator:com/mypackage/myschema.xsd</code></li></ul><p>Maven users will need to add the following dependency to their <code>pom.xml</code> for this component when using <strong>Camel 2.8</strong> or older:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -10547,7 +10566,7 @@ template.requestBodyAndHeader("dire <!-- use the same version as your Camel core version --> </dependency> ]]></script> -</div></div><h3 id="BookComponentAppendix-URIformat.70">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h3 id="BookComponentAppendix-URIformat.69">URI format</h3><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[velocity:templateName[?options] ]]></script> </div></div><p>Where <strong>templateName</strong> is the classpath-local URI of the template to invoke; or the complete URL of the remote template (eg: <a shape="rect" class="external-link" href="file://folder/myfile.vm" rel="nofollow">file://folder/myfile.vm</a>).</p><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><h3 id="BookComponentAppendix-Options.57">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>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>loaderCache</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Velocity based file loader cache.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>contentCache</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Cache for the resource content when it is loaded. <br clear="none" class="atl-forced-newline"> Note : as of Camel 2.9 cached resource content can be cleared via JMX using the endpoint's <code>clearContentCache</code> operation.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>encoding</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Character encoding of the resource content.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>propertiesFile</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>New option in Camel 2.1: The URI of the properties file which is used for VelocityEngine initialization.</p></td></tr></tbody></table></div></div> @@ -10566,7 +10585,7 @@ template.requestBodyAndHeader("dire <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ VelocityContext velocityContext = new VelocityContext(variableMap); exchange.getIn().setHeader("CamelVelocityContext", velocityContext); ]]></script> -</div></div><p> </p><h3 id="BookComponentAppendix-Hotreloading.2">Hot reloading</h3><p>The Velocity template resource is, by default, hot reloadable for both file and classpath resources (expanded jar). If you set <code>contentCache=true</code>, Camel will only load the resource once, and thus hot reloading is not possible. This scenario can be used in production, when the resource never changes.</p><h3 id="BookComponentAppendix-Dynamictemplates.1">Dynamic templates</h3><p><strong>Available as of Camel 2.1</strong><br clear="none"> Camel provides two headers by which you can define a different resource location for a template or the template content itself. If any of these headers is set then Camel uses this over the endpoint configured resource. This allows you to provide a dynamic template at runtime.</p><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Header</p></th><th col span="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>CamelVelocityResourceUri</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.1:</strong> A URI for the template resource to use instead of the endpoint configured.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>CamelVelocityTemplate</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.1:</strong> The template to use instead of the endpoint configured.</p></td></tr></tbody></table></div></div> +</div></div><p> </p><h3 id="BookComponentAppendix-Hotreloading.1">Hot reloading</h3><p>The Velocity template resource is, by default, hot reloadable for both file and classpath resources (expanded jar). If you set <code>contentCache=true</code>, Camel will only load the resource once, and thus hot reloading is not possible. This scenario can be used in production, when the resource never changes.</p><h3 id="BookComponentAppendix-Dynamictemplates.1">Dynamic templates</h3><p><strong>Available as of Camel 2.1</strong><br clear="none"> Camel provides two headers by which you can define a different resource location for a template or the template content itself. If any of these headers is set then Camel uses this over the endpoint configured resource. This allows you to provide a dynamic template at runtime.</p><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Header</p></th><th col span="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>CamelVelocityResourceUri</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.1:</strong> A URI for the template resource to use instead of the endpoint configured.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>CamelVelocityTemplate</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.1:</strong> The template to use instead of the endpoint configured.</p></td></tr></tbody></table></div></div> <h3 id="BookComponentAppendix-Samples.14">Samples</h3><p>For example you could use something like</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -10646,7 +10665,7 @@ protected RouteBuilder createRouteBuilde <p>VM is an extension to the <a shape="rect" href="seda.html">Seda</a> component.</p> -<h3 id="BookComponentAppendix-URIformat.71">URI format</h3> +<h3 id="BookComponentAppendix-URIformat.70">URI format</h3> <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[ @@ -10709,7 +10728,7 @@ from("vm:order.email").bean(My <!-- use the same version as your Camel core version --> </dependency> ]]></script> -</div></div><h3 id="BookComponentAppendix-URIformat.72">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h3 id="BookComponentAppendix-URIformat.71">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: text; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[xmpp://[login@]hostname[:port][/participant][?Options] ]]></script> </div></div><p>The component supports both room based and private person-person conversations.<br clear="none"> The component supports both producer and consumer (you can get messages from XMPP or send messages to XMPP). Consumer mode supports rooms starting.</p><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><h3 id="BookComponentAppendix-Options.59">Options</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>room</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If this option is specified, the component will connect to MUC (Multi User Chat). Usually, the domain name for MUC is different from the login domain. For example, if you are <code>super...@jabber.org</code> and wan t to join the <code>krypton</code> room, then the room URL is <code>kryp...@conference.jabber.org</code>. Note the <code>conference</code> part.<br clear="none"> It is not a requirement to provide the full room JID. If the <code>room</code> parameter does not contain the <code>@</code> symbol, the domain part will be discovered and added by Camel</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>user</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>User name (without server name). If not specified, anonymous login will be attempted.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>password</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Password.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>resource</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>XMPP resource. The default is <code>Camel</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="c onfluenceTd"><p><code>createAccount</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>If <code>true</code>, an attempt to create an account will be made. Default is <code>false</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>participant</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JID (Jabber ID) of person to receive messages. <code>room</code> parameter has precedence over <code>participant</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>nickname</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Use nickname when joining room. If room is specified and nickname is not, <code>user</code> will be used for the nickname.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>serviceName</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the service you are connecting to. For Google Talk, this would be <code>gmail.co m</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>testConnectionOnStartup</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11</strong> Specifies whether to test the connection on startup. This is used to ensure that the XMPP client has a valid connection to the XMPP server when the route starts. Camel throws an exception on startup if a connection cannot be established. When this option is set to false, Camel will attempt to establish a "lazy" connection when needed by a producer, and will poll for a consumer connection until the connection is established. Default is <code>true</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>connectionPollDelay</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.11</strong> The amount of time in seconds between polls to verify the health of the XMPP connection, or between attempts to establish an initial consumer con nection. Camel will try to re-establish a connection if it has become inactive. Default is <code>10 seconds</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">pubsub</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>Camel 2.15</strong> Accept pubsub packets on input, default is false</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">doc</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>Camel 2.15</strong> <span>Set a doc header on the IN message containing a Document form of the incoming packet; default is true if presence or pubsub are true, otherwise false</span></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">connectionConfiguration</td><td colspan="1" rowspan="1" class="confluenceTd"><strong>Camel 2.18:</strong> To use an existing connection configuration</td></tr></tbody></table></div><h3 id="BookComponentAppendix-HeadersandsettingSubjectorLanguage">Headers and setting Subject or Language</h3><p>Camel sets t he message IN headers as properties on the XMPP message. You can configure a <code>HeaderFilterStategy</code> if you need custom filtering of headers.<br clear="none"> The <strong>Subject</strong> and <strong>Language</strong> of the XMPP message are also set if they are provided as IN headers.</p><h3 id="BookComponentAppendix-Examples.16">Examples</h3><p>User <code>superman</code> to join room <code>krypton</code> at <code>jabber</code> server with password, <code>secret</code>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -10756,7 +10775,7 @@ to("activemq:krypton.talk"); ]]></script> </div></div> -<h3 id="BookComponentAppendix-URIformat.73">URI format</h3> +<h3 id="BookComponentAppendix-URIformat.72">URI format</h3> <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[ @@ -10788,7 +10807,7 @@ from("activemq:My.Queue"). </div></div> <h3 id="BookComponentAppendix-SeeAlso.70">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> <h2 id="BookComponentAppendix-XSLT">XSLT</h2><p>The <strong>xslt:</strong> component allows you to process a message using an <a shape="rect" class="external-link" href="http://www.w3.org/TR/xslt" rel="nofollow">XSLT</a> template. This can be ideal when using <a shape="rect" href="templating.html">Templating</a> to generate respopnses for requests.</p><h3 id="BookComponentAppendix-URIformat.74">URI format</h3><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<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> <h2 id="BookComponentAppendix-XSLT">XSLT</h2><p>The <strong>xslt:</strong> component allows you to process a message using an <a shape="rect" class="external-link" href="http://www.w3.org/TR/xslt" rel="nofollow">XSLT</a> template. This can be ideal when using <a shape="rect" href="templating.html">Templating</a> to generate respopnses for requests.</p><h3 id="BookComponentAppendix-URIformat.73">URI format</h3><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[xslt:templateName[?options] ]]></script> </div></div><p>Where <strong>templateName</strong> is the classpath-local URI of the template to invoke; or the complete URL of the remote template. Refer to the <a shape="rect" class="external-link" href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/core/io/DefaultResourceLoader.html" rel="nofollow">Spring Documentation for more detail of the URI syntax</a></p><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><p>Here are some example URIs</p><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>URI</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">