Author: buildbot Date: Thu Apr 21 13:20:48 2016 New Revision: 986241 Log: Production update by buildbot for camel
Modified: websites/production/camel/content/book-in-one-page.html websites/production/camel/content/book-pattern-appendix.html websites/production/camel/content/cache/main.pageCache websites/production/camel/content/hystrix-eip.html websites/production/camel/content/recipient-list.html Modified: websites/production/camel/content/book-in-one-page.html ============================================================================== --- websites/production/camel/content/book-in-one-page.html (original) +++ websites/production/camel/content/book-in-one-page.html Thu Apr 21 13:20:48 2016 @@ -122,7 +122,7 @@ ConnectionFactory connectionFactory = ne // Note we can explicit name the component context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); ]]></script> -</div></div><p>The above works with any JMS provider. If we know we are using <a shape="rect" href="activemq.html">ActiveMQ</a> we can use an even simpler form using the <a shape="rect" class="external-link" href="http://activemq.apache.org/maven/5.5.0/activemq-camel/apidocs/org/apache/activemq/camel/component/ActiveMQComponent.html#activeMQComponent%28java.lang.String%29"><code>activeMQComponent()</code> method</a> while specifying the <a shape="rect" class="external-link" href="http://activemq.apache.org/configuring-transports.html">brokerURL</a> used to connect to ActiveMQ</p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div><p>In normal use, an external system would be firing messages or events directly into Camel through one if its <a shape="rect" href="components.html">Components</a> but we are going to use the <a shape="rect" class="external-link" href="http://camel.apache.org/maven/cu rrent/camel-core/apidocs/org/apache/camel/ProducerTemplate.html">ProducerTemplate</a> which is a really easy way for testing your configuration:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>The above works with any JMS provider. If we know we are using <a shape="rect" href="activemq.html">ActiveMQ</a> we can use an even simpler form using the <a shape="rect" class="external-link" href="http://activemq.apache.org/maven/5.5.0/activemq-camel/apidocs/org/apache/activemq/camel/component/ActiveMQComponent.html#activeMQComponent%28java.lang.String%29"><code>activeMQComponent()</code> method</a> while specifying the <a shape="rect" class="external-link" href="http://activemq.apache.org/configuring-transports.html">brokerURL</a> used to connect to ActiveMQ</p>An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=activemq.git;a=blob_plain;hb=HEAD;f=trunk/activemq-camel/src/test/java/org/apache/activemq/camel/component/ActiveMQRouteTest.java status code: 404. The error has been recorded.<p>In normal use, an external system would be firing messages or events directly into Camel through one if its <a shape="rect" href="components.ht ml">Components</a> but we are going to use the <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/ProducerTemplate.html">ProducerTemplate</a> which is a really easy way for testing your configuration:</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[ ProducerTemplate template = context.createProducerTemplate(); ]]></script> @@ -1092,7 +1092,7 @@ disruptor-vm:someName[?<option>] </div></div></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Apache</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Integration with the Normalized Message Router BUS in <a shape="rect" class="external-link" href="http://servicemix.apache.org/SMX4NMR/index.html">ServiceMix 4.x</a></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="https://rhiot.gitbooks.io/rhiotdocumentation/content/backend/camel_components/camel_openimaj_component.html" rel="nofollow">OpenIMAJ</a> / camel-openimaj in <a shape="rect" class="external-link" href="https://rhiot.gitbooks.io/rhiotdocumentation/content/" rel="nofollow">rhiot.io project</a><a shape="rect" class="external-link" href="https://github.com/rhiot/rhiot/tree/master/docs" rel="nofollow"></a></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[pi4j-gpio://gpioId[?options] ]]></script> -</div></div></td><td colspan="1" rowspan="1" class="confluenceTd"> Apache</td><td colspan="1" rowspan="1" class="confluenceTd"><p> Camel <a shape="rect" class="external-link" href="http://www.openimaj.org/" rel="nofollow">OpenIMAJ</a> component can be used to detect faces in images.</p><p> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" href="pi4j-gpio.html">pi4j-gpio</a> / camel-pi4j in <a shape="rect" class="external-link" href="https://rhiot.gitbooks.io/rhiotdocumentation/content/" rel="nofollow">rhiot.io project</a></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div></td><td colspan="1" rowspan="1" class="confluenceTd"> Apache</td><td colspan="1" rowspan="1" class="confluenceTd"><p> Camel <a shape="rect" class="external-link" href="http://www.openimaj.org/" rel="nofollow">OpenIMAJ</a> component can be used to detect faces in images.</p><p> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="unresolved" href="#">pi4j-gpio</a> / camel-pi4j in <a shape="rect" class="external-link" href="https://rhiot.gitbooks.io/rhiotdocumentation/content/" rel="nofollow">rhiot.io project</a></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[pi4j-gpio://gpioId[?options] ]]></script> </div></div></td><td colspan="1" rowspan="1" class="confluenceTd">Apache</td><td colspan="1" rowspan="1" class="confluenceTd"><p>GPIO Component for RaspberryPi based on pi4j lib</p><p> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="https://github.com/camel-labs/camel-labs/tree/master/iot" rel="nofollow">pi4j-i2c</a> / camel-pi4j in <a shape="rect" class="external-link" href="https://rhiot.gitbooks.io/rhiotdocumentation/content/" rel="nofollow">rhiot.io project</a></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -2660,96 +2660,7 @@ public class CamelSpringDelegatingTestCo } // end::example[] ]]></script> -</div></div><h4 id="BookInOnePage-SpringTestwithXMLConfigandDeclarativeConfigurationExample">Spring Test with XML Config and Declarative Configuration Example</h4><p>Here is a Camel test support enhanced <a shape="rect" href="spring-testing.html">Spring Testing</a> <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunnerPlainTest.java">example using XML Config and pure Spring Test based configuration of the Camel Context</a>:</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[ -// tag::example[] -@RunWith(CamelSpringJUnit4ClassRunner.class) -// must tell Spring to bootstrap with Camel -@BootstrapWith(CamelTestContextBootstrapper.class) -@ContextConfiguration() -// Put here to prevent Spring context caching across tests and test methods since some tests inherit -// from this test and therefore use the same Spring context. Also because we want to reset the -// Camel context and mock endpoints between test methods automatically. -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) -public class CamelSpringJUnit4ClassRunnerPlainTest { - - @Autowired - protected CamelContext camelContext; - - @Autowired - protected CamelContext camelContext2; - - @EndpointInject(uri = "mock:a", context = "camelContext") - protected MockEndpoint mockA; - - @EndpointInject(uri = "mock:b", context = "camelContext") - protected MockEndpoint mockB; - - @EndpointInject(uri = "mock:c", context = "camelContext2") - protected MockEndpoint mockC; - - @Produce(uri = "direct:start", context = "camelContext") - protected ProducerTemplate start; - - @Produce(uri = "direct:start2", context = "camelContext2") - protected ProducerTemplate start2; - - @Test - public void testPositive() throws Exception { - assertEquals(ServiceStatus.Started, camelContext.getStatus()); - assertEquals(ServiceStatus.Started, camelContext2.getStatus()); - - mockA.expectedBodiesReceived("David"); - mockB.expectedBodiesReceived("Hello David"); - mockC.expectedBodiesReceived("David"); - - start.sendBody("David"); - start2.sendBody("David"); - - MockEndpoint.assertIsSatisfied(camelContext); - MockEndpoint.assertIsSatisfied(camelContext2); - } - - @Test - public void testJmx() throws Exception { - assertEquals(DefaultManagementStrategy.class, camelContext.getManagementStrategy().getClass()); - } - - @Test - public void testShutdownTimeout() throws Exception { - assertEquals(10, camelContext.getShutdownStrategy().getTimeout()); - assertEquals(TimeUnit.SECONDS, camelContext.getShutdownStrategy().getTimeUnit()); - } - - @Test - public void testStopwatch() { - StopWatch stopWatch = StopWatchTestExecutionListener.getStopWatch(); - - assertNotNull(stopWatch); - assertTrue(stopWatch.taken() < 100); - } - - @Test - public void testExcludedRoute() { - assertNotNull(camelContext.getRoute("excludedRoute")); - } - - @Test - public void testProvidesBreakpoint() { - assertNull(camelContext.getDebugger()); - assertNull(camelContext2.getDebugger()); - } - - @SuppressWarnings("deprecation") - @Test - public void testLazyLoadTypeConverters() { - assertTrue(camelContext.isLazyLoadTypeConverters()); - assertTrue(camelContext2.isLazyLoadTypeConverters()); - } -} -// end::example[] -]]></script> -</div></div>Notice how a custom test runner is used with the <code>@RunWith</code> annotation to support the features of <code>CamelTestSupport</code> through annotations on the test class. See <a shape="rect" href="spring-testing.html">Spring Testing</a> for a list of annotations you can use in your tests.<h4 id="BookInOnePage-BlueprintTest">Blueprint Test</h4><p>Here is the <a shape="rect" href="blueprint-testing.html">Blueprint Testing</a> <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/DebugBlueprintTest.java">example using XML Config</a>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h4 id="BookInOnePage-SpringTestwithXMLConfigandDeclarativeConfigurationExample">Spring Test with XML Config and Declarative Configuration Example</h4><p>Here is a Camel test support enhanced <a shape="rect" href="spring-testing.html">Spring Testing</a> <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/camel/trunk/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunnerPlainTest.java">example using XML Config and pure Spring Test based configuration of the Camel Context</a>:An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;hb=HEAD;f=components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringJUnit4ClassRunnerPlainTest.java status code: 404. The error has been recorded.Notice how a custom test runner is used with the <code>@RunWith</code> annotation to support the features of <code>CamelTestSup port</code> through annotations on the test class. See <a shape="rect" href="spring-testing.html">Spring Testing</a> for a list of annotations you can use in your tests.</p><h4 id="BookInOnePage-BlueprintTest">Blueprint Test</h4><p>Here is the <a shape="rect" href="blueprint-testing.html">Blueprint Testing</a> <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/DebugBlueprintTest.java">example using XML Config</a>:</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[ // tag::example[] // to use camel-test-blueprint, then extend the CamelBlueprintTestSupport class, @@ -3701,11 +3612,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> </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.rbtoc1460711882990 {padding: 0px;} -div.rbtoc1460711882990 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1460711882990 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1461244685104 {padding: 0px;} +div.rbtoc1461244685104 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1461244685104 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1460711882990"> +/*]]>*/</style></p><div class="toc-macro rbtoc1461244685104"> <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> @@ -5820,11 +5731,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.rbtoc1460711883991 {padding: 0px;} -div.rbtoc1460711883991 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1460711883991 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1461244686087 {padding: 0px;} +div.rbtoc1461244686087 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1461244686087 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style><div class="toc-macro rbtoc1460711883991"> +/*]]>*/</style><div class="toc-macro rbtoc1461244686087"> <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> @@ -12730,7 +12641,7 @@ public String slip(String body, @Propert </div></div><p>In the above we can use the <a shape="rect" href="parameter-binding-annotations.html">Parameter Binding Annotations</a> to bind different parts of the <a shape="rect" href="message.html">Message</a> to method parameters or use an <a shape="rect" href="expression.html">Expression</a> such as using <a shape="rect" href="xpath.html">XPath</a> or <a shape="rect" href="xquery.html">XQuery</a>.</p><p>The method can be invoked in a number of ways as described in the <a shape="rect" href="bean-integration.html">Bean Integration</a> such as</p><ul><li><a shape="rect" href="pojo-producing.html">POJO Producing</a></li><li><a shape="rect" href="spring-remoting.html">Spring Remoting</a></li><li><a shape="rect" href="bean.html">Bean</a> component</li></ul><p></p><h4 id="BookInOnePage-UsingThisPattern.16">Using This Pattern</h4> <p>If you would like to use this EIP Pattern then please read the <a shape="rect" href="getting-started.html">Getting Started</a>, you may also find the <a shape="rect" href="architecture.html">Architecture</a> useful particularly the description of <a shape="rect" href="endpoint.html">Endpoint</a> and <a shape="rect" href="uris.html">URIs</a>. Then you could try out some of the <a shape="rect" href="examples.html">Examples</a> first before trying this pattern out.</p> -<h3 id="BookInOnePage-RecipientList">Recipient List</h3><p>The <a shape="rect" class="external-link" href="http://www.enterpriseintegrationpatterns.com/RecipientList.html" rel="nofollow">Recipient List</a> from the <a shape="rect" href="enterprise-integration-patterns.html">EIP patterns</a> allows you to route messages to a number of dynamically specified recipients.</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif" data-image-src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif"></span></p><p>The recipients will receive a copy of the <strong>same</strong> <a shape="rect" href="exchange.html">Exchange</a>, and Camel will execute them sequentially.</p><h3 id="BookInOnePage-Options.10">Options</h3><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" c lass="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>delimiter</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>,</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Delimiter used if the <a shape="rect" href="expression.html">Expression</a> returned multiple endpoints. <strong>Camel 2.13</strong> can be disabled using "false"</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>strategyRef</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>An <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a> that will assemble th e replies from recipients into a single outgoing message from the <a shape="rect" href="recipient-list.html">Recipient List</a>. By default Camel will use the last reply as the outgoing message. From <strong>Camel 2.12</strong> onwards you can also use a POJO as the <code>AggregationStrategy</code>, see the <a shape="rect" href="aggregator2.html">Aggregator</a> page for more details. If an exception is thrown from the aggregate method in the AggregationStrategy, then by default, that exception is not handled by the error handler. The error handler can be enabled to react if enabling the shareUnitOfWork option.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>strategyMethodName</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> This option can be used to explicitly declare the method name to use, when using POJOs as the <code>AggregationStrate gy</code>. See the <a shape="rect" href="aggregator2.html">Aggregator</a><span> </span>page for more details.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>strategyMethodAllowNull</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:</strong> If this option is <code>false</code> then the aggregate method is not used if there was no data to enrich. If this option is <code>true</code> then <code>null</code> is used as the <code>oldExchange</code> (when no data to enrich), when using POJOs as the <code>AggregationStrategy</code>. See the <a shape="rect" href="aggregator2.html">Aggregator</a> page for more details.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>parallelProcessing</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenc eTd"><p><strong>Camel 2.2:</strong> If enabled, messages are sent to the recipients concurrently. Note that the calling thread will still wait until all messages have been fully processed before it continues; it is the sending and processing of replies from recipients which happens in parallel.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>parallelAggregate</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.14:</strong> If enabled then the <code>aggregate</code> method on <code>AggregationStrategy</code> can be called concurrently. Notice that this would require the implementation of <code>AggregationStrategy</code> to be implemented as thread-safe. By default this is <code>false</code> meaning that Camel synchronizes the call to the <code>aggregate</code> method. Though in some use-cases this can be used to archive higher performance when the <code>AggregationStrategy</code> is implemented as thread-safe.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>executorServiceRef</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> A custom <a shape="rect" href="threading-model.html">Thread Pool</a> to use for parallel processing. Note that enabling this option implies parallel processing, so you need not enable that option as well.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>stopOnException</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.2:</strong> Whether to immediately stop processing when an exception occurs. If disabled, Camel will send the message to all recipients regardless of any individual failures. You can process exceptions in an <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a> implementation, which supports full control of error handling.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ignoreInvalidEndpoints</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.3:</strong> Whether to ignore an endpoint URI that could not be resolved. If disabled, Camel will throw an exception identifying the invalid endpoint URI.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>streaming</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.5:</strong> If enabled, Camel will process replies out-of-order - that is, in the order received in reply from each recipient. If disabled, Camel will process replies in the same order as specified by the <a shape="rect" href="expression.html">Expression</a>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>timeout</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> Specifies a processing timeout in milliseconds. If the <a shape="rect" href="recipient-list.html">Recipient List</a> hasn't been able to send and process all replies within this timeframe, then the timeout triggers and the <a shape="rect" href="recipient-list.html">Recipient List</a> breaks out, with message flow continuing to the next element. Note that if you provide a <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/TimeoutAw areAggregationStrategy.html">TimeoutAwareAggregationStrategy</a>, its <code>timeout</code> method is invoked before breaking out. <strong>Beware:</strong> If the timeout is reached with running tasks still remaining, certain tasks (for which it is difficult for Camel to shut down in a graceful manner) may continue to run. So use this option with caution. We may be able to improve this functionality in future Camel releases.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>onPrepareRef</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.8:</strong> A custom <a shape="rect" href="processor.html">Processor</a> to prepare the copy of the <a shape="rect" href="exchange.html">Exchange</a> each recipient will receive. This allows you to perform arbitrary transformations, such as deep-cloning the message payload (or any other custom logic).</p></td></tr><tr><td colspan ="1" rowspan="1" class="confluenceTd"><p><code>shareUnitOfWork</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.8:</strong> Whether the unit of work should be shared. See <a shape="rect" href="splitter.html#Splitter-Sharingunitofwork">the same option on Splitter</a> for more details.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>cacheSize</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.13.1/2.12.4:</strong> Allows to configure the cache size for the <code>ProducerCache</code> which caches producers for reuse in the recipient list. Will by default use the default cache size which is 1000. Setting the value to -1 allows to turn off the cache completely.</p></td></tr></tbody></table></div></div><h4 id="BookInOnePage-StaticRecipientList ">Static Recipient List</h4><p>The following example shows how to route a request from an input <strong>queue:a</strong> endpoint to a static list of destinations</p><p><strong>Using Annotations</strong><br clear="none"> You can use the <a shape="rect" href="recipientlist-annotation.html">RecipientList Annotation</a> on a POJO to create a Dynamic Recipient List. For more details see the <a shape="rect" href="bean-integration.html">Bean Integration</a>.</p><p><strong>Using the <a shape="rect" href="fluent-builders.html">Fluent Builders</a></strong></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<h3 id="BookInOnePage-RecipientList">Recipient List</h3><p>The <a shape="rect" class="external-link" href="http://www.enterpriseintegrationpatterns.com/RecipientList.html" rel="nofollow">Recipient List</a> from the <a shape="rect" href="enterprise-integration-patterns.html">EIP patterns</a> allows you to route messages to a number of dynamically specified recipients.</p><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif" data-image-src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif"></span></p><p>The recipients will receive a copy of the <strong>same</strong> <a shape="rect" href="exchange.html">Exchange</a>, and Camel will execute them sequentially.</p><h3 id="BookInOnePage-Options.10">Options</h3><div class="confluenceTableSmall"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" c lass="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>delimiter</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>,</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Delimiter used if the <a shape="rect" href="expression.html">Expression</a> returned multiple endpoints (like "<span style="color: rgb(0,0,0);">direct:foo,direct:bar"</span>). From <strong>Camel 2.13</strong> onwards this can be disabled by setting delimiter to "false".</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>strategyRef</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>An <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/ org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a> that will assemble the replies from recipients into a single outgoing message from the <a shape="rect" href="recipient-list.html">Recipient List</a>. By default Camel will use the last reply as the outgoing message. From <strong>Camel 2.12</strong> onwards you can also use a POJO as the <code>AggregationStrategy</code>, see the <a shape="rect" href="aggregator2.html">Aggregator</a> page for more details. If an exception is thrown from the aggregate method in the AggregationStrategy, then by default, that exception is not handled by the error handler. The error handler can be enabled to react if enabling the shareUnitOfWork option.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>strategyMethodName</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.12:</strong> This opti on can be used to explicitly declare the method name to use, when using POJOs as the <code>AggregationStrategy</code>. See the <a shape="rect" href="aggregator2.html">Aggregator</a><span> </span>page for more details.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>strategyMethodAllowNull</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:</strong> If this option is <code>false</code> then the aggregate method is not used if there was no data to enrich. If this option is <code>true</code> then <code>null</code> is used as the <code>oldExchange</code> (when no data to enrich), when using POJOs as the <code>AggregationStrategy</code>. See the <a shape="rect" href="aggregator2.html">Aggregator</a> page for more details.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>parallelProcessing</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.2:</strong> If enabled, messages are sent to the recipients concurrently. Note that the calling thread will still wait until all messages have been fully processed before it continues; it is the sending and processing of replies from recipients which happens in parallel.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>parallelAggregate</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.14:</strong> If enabled then the <code>aggregate</code> method on <code>AggregationStrategy</code> can be called concurrently. Notice that this would require the implementation of <code>AggregationStrategy</code> to be implemented as thread-safe. By default this is <code >false</code> meaning that Camel synchronizes the call to the ><code>aggregate</code> method. Though in some use-cases this can be used to >archive higher performance when the <code>AggregationStrategy</code> is >implemented as thread-safe.</p></td></tr><tr><td colspan="1" rowspan="1" >class="confluenceTd"><p><code>executorServiceRef</code></p></td><td >colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td >colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.2:</strong> A >custom <a shape="rect" href="threading-model.html">Thread Pool</a> to use for >parallel processing. Note that enabling this option implies parallel >processing, so you need not enable that option as well.</p></td></tr><tr><td >colspan="1" rowspan="1" >class="confluenceTd"><p><code>stopOnException</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.2:</strong> >Whether to immediately stop proce ssing when an exception occurs. If disabled, Camel will send the message to all recipients regardless of any individual failures. You can process exceptions in an <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/AggregationStrategy.html">AggregationStrategy</a> implementation, which supports full control of error handling.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ignoreInvalidEndpoints</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.3:</strong> Whether to ignore an endpoint URI that could not be resolved. If disabled, Camel will throw an exception identifying the invalid endpoint URI.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>streaming</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</cod e></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> If enabled, Camel will process replies out-of-order - that is, in the order received in reply from each recipient. If disabled, Camel will process replies in the same order as specified by the <a shape="rect" href="expression.html">Expression</a>. <span style="color: rgb(0,0,0);">So this specifies whether the response messages are aggregated as they come in, or</span><span> i</span><span style="color: rgb(0,0,0);">n the exact order as the recipient list was evaluated. </span>Only relevant if you enable parallelProcessing.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>timeout</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.5:</strong> Specifies a processing timeout in milliseconds. If the <a shape="rect" href="recipient-list.html">Recipient List</a> hasn't been able to send and process all replies within this timeframe, then the timeout triggers and the <a shape="rect" href="recipient-list.html">Recipient List</a> breaks out, with message flow continuing to the next element. Note that if you provide a <a shape="rect" class="external-link" href="http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/processor/aggregate/TimeoutAwareAggregationStrategy.html">TimeoutAwareAggregationStrategy</a>, its <code>timeout</code> method is invoked before breaking out. <strong>Beware:</strong> If the timeout is reached with running tasks still remaining, certain tasks (for which it is difficult for Camel to shut down in a graceful manner) may continue to run. So use this option with caution. We may be able to improve this functionality in future Camel releases.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>onPrepareRef</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> </p></td><td colspan ="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.8:</strong> A custom <a shape="rect" href="processor.html">Processor</a> to prepare the copy of the <a shape="rect" href="exchange.html">Exchange</a> each recipient will receive. This allows you to perform arbitrary transformations, such as deep-cloning the message payload (or any other custom logic).</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>shareUnitOfWork</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.8:</strong> Whether the unit of work should be shared. See <a shape="rect" href="splitter.html#Splitter-Sharingunitofwork">the same option on Splitter</a> for more details.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>cacheSize</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.13.1/2.12.4:</strong> Allows to configure the cache size for the <code>ProducerCache</code> which caches producers for reuse in the recipient list. Will by default use the default cache size which is 1000. Setting the value to -1 allows to turn off the cache completely.</p></td></tr></tbody></table></div></div><h4 id="BookInOnePage-StaticRecipientList">Static Recipient List</h4><p>The following example shows how to route a request from an input <strong>queue:a</strong> endpoint to a static list of destinations</p><p><strong>Using Annotations</strong><br clear="none"> You can use the <a shape="rect" href="recipientlist-annotation.html">RecipientList Annotation</a> on a POJO to create a Dynamic Recipient List. For more details see the <a shape="rect" href="bean-integration.html">Bean Integration</a>.</p><p><strong>Using the <a shape="rect" href="fluent-builders.html">Fluent Builders</a></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[ RouteBuilder builder = new RouteBuilder() { public void configure() { @@ -12819,7 +12730,7 @@ from("direct:a").recipientList </recipientList> </route> ]]></script> -</div></div><p><strong>Note:</strong> You can combine <code>parallelProcessing</code> and <code>stopOnException</code> and have them both <code>true</code>.</p><h3 id="BookInOnePage-Ignoreinvalidendpoints">Ignore invalid endpoints</h3><p><strong>Available as of Camel 2.3</strong></p><p>The <a shape="rect" href="recipient-list.html">Recipient List</a> now supports <code>ignoreInvalidEndpoints</code> which the <a shape="rect" href="routing-slip.html">Routing Slip</a> also supports. You can use it to skip endpoints which are invalid.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p><strong>Note:</strong> You can combine <code>parallelProcessing</code> and <code>stopOnException</code> and have them both <code>true</code>.</p><h3 id="BookInOnePage-Ignoreinvalidendpoints">Ignore invalid endpoints</h3><p><strong>Available as of Camel 2.3</strong></p><p>The <a shape="rect" href="recipient-list.html">Recipient List</a> now supports <code>ignoreInvalidEndpoints</code> (like the <a shape="rect" href="routing-slip.html">Routing Slip</a>). You can use it to skip endpoints which are invalid.</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("direct:a").recipientList(header("myHeader")).ignoreInvalidEndpoints(); ]]></script> </div></div><p>And in Spring XML it is an attribute on the recipient list tag.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -12846,7 +12757,7 @@ from("direct:a").recipientList <bean id="myStrategy" class="com.mycompany.MyOwnAggregationStrategy"/> ]]></script> -</div></div><h4 id="BookInOnePage-KnowingwhichendpointwhenusingcustomAggregationStrategy">Knowing which endpoint when using custom <code>AggregationStrategy</code></h4><p><strong>Available as of Camel 2.12</strong></p><p>When using a custom <code>AggregationStrategy</code> then the <code>aggregate</code> method is always invoked in sequential order (also if parallel processing is enabled) of the endpoints the <a shape="rect" href="recipient-list.html">Recipient List</a> is using. However from Camel 2.12 onwards this is easier to know as the <code>newExchange</code> <a shape="rect" href="exchange.html">Exchange</a> has a property stored (key is <code>Exchange.RECIPIENT_LIST_ENDPOINT</code> with the uri of the <a shape="rect" href="endpoint.html">Endpoint</a>.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h4 id="BookInOnePage-KnowingwhichendpointwhenusingcustomAggregationStrategy">Knowing which endpoint when using custom <code>AggregationStrategy</code></h4><p><strong>Available as of Camel 2.12</strong></p><p>When using a custom <code>AggregationStrategy</code> then the <code>aggregate</code> method is always invoked in sequential order (also if parallel processing is enabled) of the endpoints the <a shape="rect" href="recipient-list.html">Recipient List</a> is using. However from Camel 2.12 onwards this is easier to know as the <code>newExchange</code> <a shape="rect" href="exchange.html">Exchange</a> now has a property stored (key is <code>Exchange.RECIPIENT_LIST_ENDPOINT</code> with the uri of the <a shape="rect" href="endpoint.html">Endpoint</a>. So you know which endpoint you are aggregating from. The code block shows how to access this property in your <a shape="rect" href="aggregator2.html">Aggregator</a>. </p><div class="code panel pdl" style="border-wi dth: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ @Override public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { String uri = newExchange.getProperty(Exchange.RECIPIENT_LIST_ENDPOINT, String.class); @@ -16645,7 +16556,10 @@ public class BlogService { <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 class="alternate"><li><a shape="rect" href="rss.html">RSS</a></li></ul> <h2 id="BookInOnePage-BeanComponent.1">Bean Component</h2><p>The <strong>bean:</strong> component binds beans to Camel message exchanges.</p><h3 id="BookInOnePage-URIformat.4">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[bean:beanID[?options] ]]></script> -</div></div><p>Where <strong>beanID</strong> can be any string which is used to look up the bean in the <a shape="rect" href="registry.html">Registry</a></p><h3 id="BookInOnePage-Options.23">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>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>method</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>The method name from the bean that will be invoked. If not provided, Camel will try to determine the method itself. In case o f ambiguity an exception will be thrown. See <a shape="rect" href="bean-binding.html">Bean Binding</a> for more details. From <strong>Camel 2.8</strong> onwards you can specify type qualifiers to pin-point the exact method to use for overloaded methods. From <strong>Camel 2.9</strong> onwards you can specify parameter values directly in the method syntax. See more details at <a shape="rect" href="bean-binding.html">Bean Binding</a>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>cache</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>If enabled, Camel will cache the result of the first <a shape="rect" href="registry.html">Registry</a> look-up. Cache can be enabled if the bean in the <a shape="rect" href="registry.html">Registry</a> is defined as a singleton scope.</p></td></tr><tr> <td colspan="1" rowspan="1" class="confluenceTd"><p><code>multiParameterArray</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>How to treat the parameters which are passed from the message body; if it is <code>true</code>, the In message body should be an array of parameters.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>bean.xxx</p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong style="line-height: 1.42857;">Camel 2.17:</strong> To configure additional options on the create bean instance from the class name. For example to configure a foo option on the bean, use bean.foo=123.</p></td></tr></tbody></table></div></div><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><h3 id="BookInOnePage-Using">Using</h3><p>The object instance that is used to consume messages must be explicitly registered with the <a shape="rect" href="registry.html">Registry</a>. For example, if you are using Spring you must define the bean in the Spring configuration, <code>spring.xml</code>; or if you don't use Spring, by registering the bean in JNDI.</p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>Once an endpoint has been registered, you can build Camel routes that use it to process exchanges.<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>Where <strong>beanID</strong> can be any string which is used to look up the bean in the <a shape="rect" href="registry.html">Registry</a></p><h3 id="BookInOnePage-Options.23">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>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>method</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>The method name from the bean that will be invoked. If not provided, Camel will try to determine the method itself. In case o f ambiguity an exception will be thrown. See <a shape="rect" href="bean-binding.html">Bean Binding</a> for more details. From <strong>Camel 2.8</strong> onwards you can specify type qualifiers to pin-point the exact method to use for overloaded methods. From <strong>Camel 2.9</strong> onwards you can specify parameter values directly in the method syntax. See more details at <a shape="rect" href="bean-binding.html">Bean Binding</a>.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>cache</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>If enabled, Camel will cache the result of the first <a shape="rect" href="registry.html">Registry</a> look-up. Cache can be enabled if the bean in the <a shape="rect" href="registry.html">Registry</a> is defined as a singleton scope.</p></td></tr><tr> <td colspan="1" rowspan="1" class="confluenceTd"><p><code>multiParameterArray</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>How to treat the parameters which are passed from the message body; if it is <code>true</code>, the In message body should be an array of parameters.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>bean.xxx</p></td><td colspan="1" rowspan="1" class="confluenceTd"> </td><td colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong style="line-height: 1.42857;">Camel 2.17:</strong> To configure additional options on the create bean instance from the class name. For example to configure a foo option on the bean, use bean.foo=123.</p></td></tr></tbody></table></div></div><p>You can append query options to the URI in the following format, <code>?option=value&option=value&...</code></p><h3 id="BookInOnePage-Using">Using</h3><p>The object instance that is used to consume messages must be explicitly registered with the <a shape="rect" href="registry.html">Registry</a>. For example, if you are using Spring you must define the bean in the Spring configuration, <code>spring.xml</code>; or if you don't use Spring, by registering the bean in JNDI.</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[ +]]></script> +</div></div>Once an endpoint has been registered, you can build Camel routes that use it to process exchanges.<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 camelContext.addRoutes(new RouteBuilder() { @@ -17254,11 +17168,11 @@ template.send("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.rbtoc1460711932883 {padding: 0px;} -div.rbtoc1460711932883 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1460711932883 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1461244714180 {padding: 0px;} +div.rbtoc1461244714180 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1461244714180 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1460711932883"> +/*]]>*/</style></p><div class="toc-macro rbtoc1461244714180"> <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> @@ -18651,7 +18565,10 @@ Exchange.FILE_NAME = foo/bye.txt => / </properties> </persistence-unit> ]]></script> -</div></div>Then we need to setup a Spring <code>jpaTemplate</code> in the spring XML file:<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>And finally we can create our JPA idempotent repository in the spring XML file as well:<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div>Then we need to setup a Spring <code>jpaTemplate</code> in the spring XML file:<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[ +]]></script> +</div></div>And finally we can create our JPA 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[ <!-- we define our jpa based idempotent repository we want to use in the file consumer --> <bean id="jpaStore" class="org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository"> @@ -21147,7 +21064,7 @@ public void configure() throws Exception </route> </camelContext> -<!-- Just add a demo to show how to bind a date source for camel in Spring--> +<!-- Just add a demo to show how to bind a data source for camel in Spring--> <jdbc:embedded-database id="testdb" type="DERBY"> <jdbc:script location="classpath:sql/init.sql"/> </jdbc:embedded-database> @@ -21945,7 +21862,10 @@ public class MultiSteps { </properties> </persistence-unit> ]]></script> -</div></div>Second we have to setup a <code>org.springframework.orm.jpa.JpaTemplate</code> which is used by the <code>org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository</code>:<div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>Afterwards we can configure our <code>org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository</code>:<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div>Second we have to setup a <code>org.springframework.orm.jpa.JpaTemplate</code> which is used by the <code>org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository</code>:<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[ +]]></script> +</div></div>Afterwards we can configure our <code>org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository</code>:<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[ <!-- we define our jpa based idempotent repository we want to use in the file consumer --> <bean id="jpaStore" class="org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository"> @@ -23941,7 +23861,7 @@ TargetCompID=YOUR_TARGET .withField(ExecTransType.FIELD, Integer.toString(ExecTransType.STATUS)) .withField(OrderID.FIELD, request.getString(OrderID.FIELD))); ]]></script> -</div></div><h4 id="BookInOnePage-Example.28">Example</h4><p>The source code contains an example called <code>RequestReplyExample</code> that demonstrates the InOut exchanges<br clear="none"> for a consumer and producer. This example creates a simple HTTP server endpoint that accepts order<br clear="none"> status requests. The HTTP request is converted to a FIX OrderStatusRequestMessage, is augmented with a<br clear="none"> correlation criteria, and is then routed to a quickfix endpoint. The response is then converted to a<br clear="none"> JSON-formatted string and sent back to the HTTP server endpoint to be provided as the web response.</p><p>The Spring configuration have changed from Camel 2.9 onwards. See further below for example.</p><h3 id="BookInOnePage-SpringConfiguration">Spring Configuration</h3><p><strong>Camel 2.6 - 2.8.x</strong></p><p>The QuickFIX/J component includes a Spring <code>FactoryBean</code> for configuring the session settings within a Spring context. A type converter for QuickFIX/J session ID strings is also included. The following example shows a simple configuration of an acceptor and initiator session with default settings for both sessions.</p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div><p><strong>Camel 2.9 onwards</strong></p><p>The QuickFIX/J component includes a <code>QuickfixjConfiguration</code> class for configuring the session settings. A type converter for QuickFIX/J session ID strings is also included. The following example shows a simple configuration of an acceptor and initiator session with default settings for both sessions.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h4 id="BookInOnePage-Example.28">Example</h4><p>The source code contains an example called <code>RequestReplyExample</code> that demonstrates the InOut exchanges<br clear="none"> for a consumer and producer. This example creates a simple HTTP server endpoint that accepts order<br clear="none"> status requests. The HTTP request is converted to a FIX OrderStatusRequestMessage, is augmented with a<br clear="none"> correlation criteria, and is then routed to a quickfix endpoint. The response is then converted to a<br clear="none"> JSON-formatted string and sent back to the HTTP server endpoint to be provided as the web response.</p><p>The Spring configuration have changed from Camel 2.9 onwards. See further below for example.</p><h3 id="BookInOnePage-SpringConfiguration">Spring Configuration</h3><p><strong>Camel 2.6 - 2.8.x</strong></p><p>The QuickFIX/J component includes a Spring <code>FactoryBean</code> for configuring the session settings within a Spring context. A type converter for QuickFIX/J session ID strings is also included. The following example shows a simple configuration of an acceptor and initiator session with default settings for both sessions.</p>An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;hb=HEAD;f=branches/camel-2.8.x/components/camel-quickfix/src/test/resources/org/apache/camel/component/quickfixj/QuickfixjSpringTest-context.xml status code: 404. The error has been recorded.<p><strong>Camel 2.9 onwards</strong></p><p>The QuickFIX/J component includes a <code>QuickfixjConfiguration</code> class for configuring the session settings. A type converter for QuickFIX/J session ID strings is also included. The following example shows a simple configuration of an acceptor and initiator session with default settings for both sessions.</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[ <!-- tag::e1[] --> <!-- camel route --> @@ -24308,71 +24228,7 @@ from("direct:start") .multicast().placeholder("stopOnException", "stop") .to("mock:a").throwException(new IllegalAccessException("Damn")).to("mock:b"); ]]></script> -</div></div><h3 id="BookInOnePage-UsingBlueprintpropertyplaceholderwithCamelroutes">Using Blueprint property placeholder with Camel routes</h3><p><strong>Available as of Camel 2.7</strong></p><p>Camel supports <a shape="rect" href="using-osgi-blueprint-with-camel.html">Blueprint</a> which also offers a property placeholder service. Camel supports convention over configuration, so all you have to do is to define the OSGi Blueprint property placeholder in the XML file as shown below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Using OSGi blueprint property placeholders in Camel routes</b></div><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" - xsi:schemaLocation=" - http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> - - <!-- OSGI blueprint property placeholder --> - <cm:property-placeholder id="myblueprint.placeholder" persistent-id="camel.blueprint"> - <!-- list some properties for this test --> - <cm:default-properties> - <cm:property name="result" value="mock:result"/> - </cm:default-properties> - </cm:property-placeholder> - - <camelContext xmlns="http://camel.apache.org/schema/blueprint"> - - <!-- in the route we can use {{ }} placeholders which will lookup in blueprint - as Camel will auto detect the OSGi blueprint property placeholder and use it --> - <route> - <from uri="direct:start"/> - <to uri="mock:foo"/> - <to uri="{{result}}"/> - </route> - - </camelContext> - -</blueprint> -]]></script> -</div></div>By default Camel detects and uses OSGi blueprint property placeholder service. You can disable this by setting the attribute <code>useBlueprintPropertyResolver</code> to false on the <code><camelContext></code> definition.<div class="confluence-information-macro confluence-information-macro-information"><p class="title">About placeholder syntaxes</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Notice how we can use the Camel syntax for placeholders {{ }} in the Camel route, which will lookup the value from OSGi blueprint.<br clear="none"> The blueprint syntax for placeholders is ${ }. So outside the <camelContext> you must use the ${ } syntax. Where as inside <camelContext> you must use {{ }} syntax.<br clear="none"> OSGi blueprint allows you to configure the syntax, so you can actually align those if you want.</p></div></div><p>You can also explicit re fer to a specific OSGi blueprint property placeholder by its id. For that you need to use the Camel's <propertyPlaceholder> as shown in the example below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>Explicit referring to a OSGi blueprint placeholder in Camel</b></div><div class="codeContent panelContent pdl"> -<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ -<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0" - xsi:schemaLocation=" - http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> - - <!-- OSGI blueprint property placeholder --> - <cm:property-placeholder id="myblueprint.placeholder" persistent-id="camel.blueprint"> - <!-- list some properties for this test --> - <cm:default-properties> - <cm:property name="prefix.result" value="mock:result"/> - </cm:default-properties> - </cm:property-placeholder> - - <camelContext xmlns="http://camel.apache.org/schema/blueprint"> - - <!-- using Camel properties component and refer to the blueprint property placeholder by its id --> - <propertyPlaceholder id="properties" location="blueprint:myblueprint.placeholder" - prefixToken="[[" suffixToken="]]" - propertyPrefix="prefix."/> - - <!-- in the route we can use {{ }} placeholders which will lookup in blueprint --> - <route> - <from uri="direct:start"/> - <to uri="mock:foo"/> - <to uri="[[result]]"/> - </route> - - </camelContext> - -</blueprint> -]]></script> -</div></div>Notice how we use the <code>blueprint</code> scheme to refer to the OSGi blueprint placeholder by its id. This allows you to mix and match, for example you can also have additional schemes in the location. For example to load a file from the classpath you can do:<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h3 id="BookInOnePage-UsingBlueprintpropertyplaceholderwithCamelroutes">Using Blueprint property placeholder with Camel routes</h3><p><strong>Available as of Camel 2.7</strong></p><p>Camel supports <a shape="rect" href="using-osgi-blueprint-with-camel.html">Blueprint</a> which also offers a property placeholder service. Camel supports convention over configuration, so all you have to do is to define the OSGi Blueprint property placeholder in the XML file as shown below:An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;hb=HEAD;f=tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-17.xml status code: 404. The error has been recorded.By default Camel detects and uses OSGi blueprint property placeholder service. You can disable this by setting the attribute <code>useBlueprintPropertyResolver</code> to false on the <code><camelContext></code> definition.</p><div class="co nfluence-information-macro confluence-information-macro-information"><p class="title">About placeholder syntaxes</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Notice how we can use the Camel syntax for placeholders {{ }} in the Camel route, which will lookup the value from OSGi blueprint.<br clear="none"> The blueprint syntax for placeholders is ${ }. So outside the <camelContext> you must use the ${ } syntax. Where as inside <camelContext> you must use {{ }} syntax.<br clear="none"> OSGi blueprint allows you to configure the syntax, so you can actually align those if you want.</p></div></div><p>You can also explicit refer to a specific OSGi blueprint property placeholder by its id. For that you need to use the Camel's <propertyPlaceholder> as shown in the example below:An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel .git;a=blob_plain;hb=HEAD;f=tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/blueprint/blueprint-16.xml status code: 404. The error has been recorded.Notice how we use the <code>blueprint</code> scheme to refer to the OSGi blueprint placeholder by its id. This allows you to mix and match, for example you can also have additional schemes in the location. For example to load a file from the classpath you can do:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[location="blueprint:myblueprint.placeholder,classpath:myproperties.properties" ]]></script> </div></div><p>Each location is separated by comma.</p><h4 id="BookInOnePage-OverridingBlueprintpropertyplaceholdersoutsideCamelContext">Overriding Blueprint property placeholders outside CamelContext</h4><p><strong>Available as of Camel 2.10.4</strong></p><p>When using Blueprint property placeholder in the Blueprint XML file, you can declare the properties directly in the XML file as shown below:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -25204,150 +25060,7 @@ from("servlet:hello?matchOnUriPrefi </servlet> <web-app> ]]></script> -</div></div><h4 id="BookInOnePage-SamplewhenusingOSGi">Sample when using OSGi</h4><p>From <strong>Camel 2.6.0</strong>, you can publish the <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java">CamelHttpTransportServlet</a> as an OSGi service with help of SpringDM like this.</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[ -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:osgi="http://www.springframework.org/schema/osgi" - xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"> - - <bean id="camelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet"> - </bean> - - <!-- - Enlist it in OSGi service registry - This will cause two things: - 1) As the pax web whiteboard extender is running the CamelServlet will - be registered with the OSGi HTTP Service - 2) It will trigger the HttpRegistry in other bundles so the servlet is - made known there too - --> - <osgi:service ref="camelServlet"> - <osgi:interfaces> - <value>javax.servlet.Servlet</value> - <value>org.apache.camel.component.http.CamelServlet</value> - </osgi:interfaces> - <osgi:service-properties> - <entry key="alias" value="/camel/services" /> - <entry key="matchOnUriPrefix" value="true" /> - <entry key="servlet-name" value="CamelServlet"/> - </osgi:service-properties> - </osgi:service> - -</beans> -]]></script> -</div></div><p>Then use this service in your camel route like this:</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[ -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:camel="http://camel.apache.org/schema/spring" - xmlns:osgi="http://www.springframework.org/schema/osgi" - xsi:schemaLocation=" - http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd - http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> - - <osgi:reference id="servletref" interface="org.apache.camel.component.http.CamelServlet"> - <osgi:listener bind-method="register" unbind-method="unregister"> - <ref bean="httpRegistry"/> - </osgi:listener> - </osgi:reference> - - <bean id="httpRegistry" class="org.apache.camel.component.servlet.DefaultHttpRegistry"/> - - <bean id="servlet" class="org.apache.camel.component.servlet.ServletComponent"> - <property name="httpRegistry" ref="httpRegistry" /> - </bean> - - <bean id="servletProcessor" class="org.apache.camel.itest.osgi.servlet.ServletProcessor" /> - - <camelContext xmlns="http://camel.apache.org/schema/spring"> - <route> - <!-- notice how we can use the servlet scheme which is that osgi:reference above --> - <from uri="servlet:///hello"/> - <process ref="servletProcessor"/> - </route> - </camelContext> - -</beans> -]]></script> -</div></div><p>For versions prior to Camel 2.6 you can use an <code>Activator</code> to publish the <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java">CamelHttpTransportServlet</a> on the OSGi platform</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[ -import java.util.Dictionary; -import java.util.Hashtable; - -import org.apache.camel.component.servlet.CamelHttpTransportServlet; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import org.osgi.service.http.HttpContext; -import org.osgi.service.http.HttpService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.osgi.context.BundleContextAware; - -public final class ServletActivator implements BundleActivator, BundleContextAware { - private static final Logger LOG = LoggerFactory.getLogger(ServletActivator.class); - private static boolean registerService; - - /** - * HttpService reference. - */ - private ServiceReference<?> httpServiceRef; - - /** - * Called when the OSGi framework starts our bundle - */ - public void start(BundleContext bc) throws Exception { - registerServlet(bc); - } - - /** - * Called when the OSGi framework stops our bundle - */ - public void stop(BundleContext bc) throws Exception { - if (httpServiceRef != null) { - bc.ungetService(httpServiceRef); - httpServiceRef = null; - } - } - - protected void registerServlet(BundleContext bundleContext) throws Exception { - httpServiceRef = bundleContext.getServiceReference(HttpService.class.getName()); - - if (httpServiceRef != null && !registerService) { - LOG.info("Register the servlet service"); - final HttpService httpService = (HttpService)bundleContext.getService(httpServiceRef); - if (httpService != null) { - // create a default context to share between registrations - final HttpContext httpContext = httpService.createDefaultHttpContext(); - // register the hello world servlet - final Dictionary<String, String> initParams = new Hashtable<String, String>(); - initParams.put("matchOnUriPrefix", "false"); - initParams.put("servlet-name", "CamelServlet"); - httpService.registerServlet("/camel/services", // alias - new CamelHttpTransportServlet(), // register servlet - initParams, // init params - httpContext // http context - ); - registerService = true; - } - } - } - - public void setBundleContext(BundleContext bc) { - try { - registerServlet(bc); - } catch (Exception e) { - LOG.error("Cannot register the servlet, the reason is " + e); - } - } - -} -]]></script> -</div></div><p></p><h3 id="BookInOnePage-SeeAlso.76">See Also</h3> +</div></div><h4 id="BookInOnePage-SamplewhenusingOSGi">Sample when using OSGi</h4><p>From <strong>Camel 2.6.0</strong>, you can publish the <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java">CamelHttpTransportServlet</a> as an OSGi service with help of SpringDM like this.</p>An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;hb=HEAD;f=tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/servlet/ServletServiceContext.xml status code: 404. The error has been recorded.<p>Then use this service in your camel route like this:</p>An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;hb=HEAD;f=tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/servlet/CamelServletWithServletServiceContext.xml statu s code: 404. The error has been recorded.<p>For versions prior to Camel 2.6 you can use an <code>Activator</code> to publish the <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java">CamelHttpTransportServlet</a> on the OSGi platform</p>An error occurred: Unable to retrieve the URL: https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;hb=HEAD;f=tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/servlet/support/ServletActivator.java status code: 404. The error has been recorded.<p></p><h3 id="BookInOnePage-SeeAlso.76">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 class="alternate"><li><a shape="rect" href="servlet-tomcat-example.html">Servlet Tomcat Example</a></li><li><a shape="rect" href="servlet-tomcat-no-spring-example.html">Servlet Tomcat No Spring Example</a></li><li><a shape="rect" href="http.html">HTTP</a></li><li><a shape="rect" href="jetty.html">Jetty</a></li></ul> <h2 id="BookInOnePage-ShiroSecurityComponent">Shiro Security Component</h2><p><strong>Available as of Camel 2.5</strong></p><p>The <strong>shiro-security</strong> component in Camel is a security focused component, based on the Apache Shiro security project.</p><p>Apache Shiro is a powerful and flexible open-source security framework that cleanly handles authentication, authorization, enterprise s ession management and cryptography. The objective of the Apache Shiro project is to provide the most robust and comprehensive application security framework available while also being very easy to understand and extremely simple to use.</p><p>This camel shiro-security component allows authentication and authorization support to be applied to different segments of a camel route.</p><p>Shiro security is applied on a route using a Camel Policy. A Policy in Camel utilizes a strategy pattern for applying interceptors on Camel Processors. It offering the ability to apply cross-cutting concerns (for example. security, transactions etc) on sections/segments of a camel route.</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>