Author: buildbot Date: Tue Aug 2 18:19:51 2016 New Revision: 994305 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/jms.html websites/production/camel/content/properties.html websites/production/camel/content/using-propertyplaceholder.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 Tue Aug 2 18:19:51 2016 @@ -1040,11 +1040,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.rbtoc1470143921005 {padding: 0px;} -div.rbtoc1470143921005 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1470143921005 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1470161864567 {padding: 0px;} +div.rbtoc1470161864567 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1470161864567 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1470143921005"> +/*]]>*/</style></p><div class="toc-macro rbtoc1470161864567"> <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> @@ -5421,7 +5421,7 @@ rnc:someLocalOrRemoteResource]]></script <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("jms:SomeQueue?concurrentConsumers=20") .bean(MyClass.class); ]]></script> -</div></div><p>You can configure this option in one of the following ways:</p><ul><li>On the <code>JmsComponent</code>,</li><li>On the endpoint URI or,</li><li>By invoking <code>setConcurrentConsumers()</code> directly on the <code>JmsEndpoint</code>.</li></ul><h4 id="BookComponentAppendix-ConcurrentConsumingwithasyncconsumer">Concurrent Consuming with async consumer</h4><p>Notice that each concurrent consumer will only pickup the next available message from the JMS broker, when the current message has been fully processed. You can set the option <code>asyncConsumer=true</code> to let the consumer pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the <a shape="rect" href="asynchronous-routing-engine.html">Asynchronous Routing Engine</a>). See more details in the table on top of the page about the <code>asyncConsumer</code> option.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>You can configure this option in one of the following ways:</p><ul><li><p>On the <code>JmsComponent</code></p></li><li><p>On the endpoint URI.</p></li><li><p>By invoking <code>setConcurrentConsumers()</code> directly on the <code>JmsEndpoint</code>.</p></li></ul><h4 id="BookComponentAppendix-ConcurrentConsumingwithasyncconsumer">Concurrent Consuming with async consumer</h4><p>Notice that each concurrent consumer will only pickup the next available message from the JMS broker, when the current message has been fully processed. You can set the option <code>asyncConsumer=true</code> to let the consumer pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the <a shape="rect" href="asynchronous-routing-engine.html">Asynchronous Routing Engine</a>). See more details in the table on top of the page about the <code>asyncConsumer</code> option.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeCont ent panelContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("jms:SomeQueue?concurrentConsumers=20&asyncConsumer=true") .bean(MyClass.class); ]]></script> @@ -5471,7 +5471,7 @@ from(aaa) .setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout")) .to("jms:queue:foo?replyTo=bar&requestTimeout=30s") .to("bean:processReply");]]></script> -</div></div><p>When you do fire and forget (<code>InOut</code>) over <a shape="rect" href="jms.html">JMS</a> Camel will, by default, <strong>not</strong> set a time to live value on the message. The value can be configured using the <code>timeToLive</code> option. For example to indicate a 5 sec., you set <code>timeToLive=5000</code>. The option <code>disableTimeToLive</code> can be used to force disabling the time to live, also for <code>InOnly</code> messaging. The <code>requestTimeout</code> option is not being used for <code>InOnly</code> messaging.</p><h3 id="BookComponentAppendix-EnablingTransactedConsumption">Enabling Transacted Consumption</h3><p><span class="confluence-anchor-link" id="BookComponentAppendix-transactedConsumption"></span></p><p>A common requirement is to consume from a queue in a transaction and then process the message using the Camel route. To do this, just ensure that you set the following properties on the component/endpoint:</p><ul><li><code>t ransacted = true</code></li><li><code>transactionManager</code> = <<em>Some</em><em>TransactionManager</em>> (typically the <code>JmsTransactionManager)</code></li></ul><p>See the <a shape="rect" href="transactional-client.html">Transactional Client</a> EIP pattern for further details.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Transactions and [Request Reply] over JMS</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When using <a shape="rect" href="request-reply.html">Request Reply</a> over JMS you cannot use a single transaction; JMS will not send any messages until a commit is performed, so the server side won't receive anything at all until the transaction commits. Therefore to use <a shape="rect" href="request-reply.html">Request Reply</a> you must commit a transaction after sending the request and then use a sepa rate transaction for receiving the response.</p><p>To address this issue the JMS component uses different properties to specify transaction use for oneway messaging and request reply messaging:</p><ul><li>The <code>transacted</code> property applies <strong>only</strong> to the <code>InOnly</code> message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP).</li><li>The <code>transactedInOut</code> property applies to the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP). If you want to use transactions with the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP), you <strong>must</strong> set <code>transactedInOut=true</code>.</li></ul></div></div><p><strong>Avai lable as of Camel 2.10</strong></p><p>You can leverage the <a shape="r ect" class="external-link" href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)" rel="nofollow">DMLC transacted session API</a> using the following properties on component/endpoint:</p><ul><li><code>transacted = true</code></li><li><code>lazyCreateTransactionManager = false</code></li></ul><p>The benefit of doing so is that the <code>cacheLevel</code> setting will be honored when using local transactions without a configured TransactionManager. When a TransactionManager is configured, no caching happens at DMLC level and its necessary to rely on a pooled connection factory. For more details about this kind of setup see <a shape="rect" class="external-link" href="http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html" rel="nofollow">here</a> and <a shape="rect" class="external-link" href="http://forum.springsource.org/showthread.php?1236 31-JMS-DMLC-not-caching connection-when-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530" rel="nofollow">here</a>.</p><h3 id="BookComponentAppendix-UsingJMSReplyToforlatereplies">Using JMSReplyTo for late replies</h3><p>When using Camel as a JMS listener, it sets an Exchange property with the value of the ReplyTo <strong><code>javax.jms.Destination</code></strong> object, having the key <code>ReplyTo</code>. You can obtain this <code>Destination</code> as follows:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>When you do fire and forget (<code>InOut</code>) over <a shape="rect" href="jms.html">JMS</a> Camel will, by default, <strong>not</strong> set a time to live value on the message. The value can be configured using the <code>timeToLive</code> option. For example to indicate a 5 sec., you set <code>timeToLive=5000</code>. The option <code>disableTimeToLive</code> can be used to force disabling the time to live, also for <code>InOnly</code> messaging. The <code>requestTimeout</code> option is not being used for <code>InOnly</code> messaging.</p><h3 id="BookComponentAppendix-EnablingTransactedConsumption">Enabling Transacted Consumption</h3><p><span class="confluence-anchor-link" id="BookComponentAppendix-transactedConsumption"></span></p><p>A common requirement is to consume from a queue in a transaction and then process the message using the Camel route. To do this, just ensure that you set the following properties on the component/endpoint:</p><ul><li><p><cod e>transacted = true</code></p></li><li><p><code>transactionManager</code> = <<em>Some</em><em>TransactionManager</em>> (typically the <code>JmsTransactionManager)</code></p></li></ul><p>See the <a shape="rect" href="transactional-client.html">Transactional Client</a> EIP pattern for further details.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Transactions and [Request Reply] over JMS</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When using <a shape="rect" href="request-reply.html">Request Reply</a> over JMS you cannot use a single transaction; JMS will not send any messages until a commit is performed, so the server side won't receive anything at all until the transaction commits. Therefore to use <a shape="rect" href="request-reply.html">Request Reply</a> you must commit a transaction after sending the request and t hen use a separate transaction for receiving the response.</p><p>To address this issue the JMS component uses different properties to specify transaction use for oneway messaging and request reply messaging:</p><ul><li>The <code>transacted</code> property applies <strong>only</strong> to the <code>InOnly</code> message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP).</li><li>The <code>transactedInOut</code> property applies to the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP). If you want to use transactions with the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP), you <strong>must</strong> set <code>transactedInOut=true</code>.</li></ul></div></div><p><strong>Available as of Camel 2.10</strong></p><p>You can leverage th e <a shape="rect" class="external-link" href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)" rel="nofollow">DMLC transacted session API</a> using the following properties on component/endpoint:</p><ul><li><p><code>transacted = true</code></p></li><li><p><code>lazyCreateTransactionManager = false</code></p></li></ul><p>The benefit of doing so is that the <code>cacheLevel</code> setting will be honored when using local transactions without a configured TransactionManager. When a TransactionManager is configured, no caching happens at DMLC level and its necessary to rely on a pooled connection factory. For more details about this kind of setup see <a shape="rect" class="external-link" href="http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html" rel="nofollow">here</a> and <a shape="rect" class="external-link" href="http://forum.springsou rce.org/showthread.php?123631-JMS-DMLC-not-caching connection-when-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530" rel="nofollow">here</a>.</p><h3 id="BookComponentAppendix-UsingJMSReplyToforlatereplies">Using JMSReplyTo for late replies</h3><p>When using Camel as a JMS listener, it sets an Exchange property with the value of the ReplyTo <strong><code>javax.jms.Destination</code></strong> object, having the key <code>ReplyTo</code>. You can obtain this <code>Destination</code> as follows:</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[Destination replyDestination = exchange.getIn().getHeader(JmsConstants.JMS_REPLY_DESTINATION, Destination.class); ]]></script> </div></div><p>And then later use it to send a reply using regular JMS or Camel.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -5563,7 +5563,7 @@ wmq.setDestinationResolver(new Destinati }); ]]></script> </div></div><p></p><h3 id="BookComponentAppendix-SeeAlso.32">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="transactional-client.html">Transactional Client</a></li><li><a shape="rect" href="bean-integration.html">Bean Integration</a></li><li><a shape="rect" href="tutorial-jmsremoting.html">Tutorial-JmsRemoting</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/jmstemplate-gotchas.html">JMSTemplate gotchas</a></li></ul> <h2 id="BookComponentAppendix-JMXComponent">JMX Component</h2> +<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="transactional-client.html">Transactional Client</a></li><li><a shape="rect" href="bean-integration.html">Bean Integration</a></li><li><a shape="rect" href="tutorial-jmsremoting.html">Tutorial-JmsRemoting</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/jmstemplate-gotchas.html">JMSTemplate gotchas</a></li></ul><div class="firebugResetStyles firebugBlockBackgroundColor firebugLayoutBox firebugLayoutBoxOffset" style="left: 10.0px;top: 307.0px;"><div class="firebugResetStyles firebugLayoutBox" style="padding: 10.0px 0.0px 0.0px;background-color: rgb(237,255,100);"><div class="firebugResetStyles firebugLayoutBox" style="padding: 1.0px;b ackground-color: rgb(68,68,68);"></div></div></div> <h2 id="BookComponentAppendix-JMXComponent">JMX Component</h2> <p><strong>Available as of Camel 2.6</strong></p> <h3 id="BookComponentAppendix-StandardJMXConsumerConfiguration">Standard JMX Consumer Configuration</h3> @@ -8087,7 +8087,61 @@ assertMockEndpointsSatisfied(); // which should have the value of {{stop}} key being looked up in the properties file .multicast().placeholder("stopOnException", "stop") .to("mock:a").throwException(new IllegalAccessException("Damn")).to("mock:b");]]></script> -</div></div><h3 id="BookComponentAppendix-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="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </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 >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:</p><div class="error"><span class="error">Error formatting >macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: >20</span> </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="BookComponentAppendix-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="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 as needed --> + <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><p><span style="line-height: 1.42857;"><br clear="none"></span></p><p><span style="line-height: 1.42857;">By default Camel detects and uses OSGi blueprint property placeholder service. You can disable this by setting the attribute </span><code style="line-height: 1.42857;">useBlueprintPropertyResolver</code><span style="line-height: 1.42857;"> to false on the </span><code style="line-height: 1.42857;"><camelContext></code><span style="line-height: 1.42857;"> definition.</span></p><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 <cam elContext> 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:</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[<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 as needed --> + <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><p> </p><p>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="BookComponentAppendix-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"> 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 Tue Aug 2 18:19:51 2016 @@ -3619,11 +3619,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.rbtoc1470143948251 {padding: 0px;} -div.rbtoc1470143948251 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1470143948251 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1470161891904 {padding: 0px;} +div.rbtoc1470161891904 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1470161891904 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1470143948251"> +/*]]>*/</style></p><div class="toc-macro rbtoc1470161891904"> <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> @@ -5738,11 +5738,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.rbtoc1470143948889 {padding: 0px;} -div.rbtoc1470143948889 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1470143948889 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1470161892837 {padding: 0px;} +div.rbtoc1470161892837 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1470161892837 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style><div class="toc-macro rbtoc1470143948889"> +/*]]>*/</style><div class="toc-macro rbtoc1470161892837"> <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> @@ -17167,11 +17167,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.rbtoc1470143972801 {padding: 0px;} -div.rbtoc1470143972801 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1470143972801 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1470161913825 {padding: 0px;} +div.rbtoc1470161913825 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1470161913825 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1470143972801"> +/*]]>*/</style></p><div class="toc-macro rbtoc1470161913825"> <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> @@ -21548,7 +21548,7 @@ rnc:someLocalOrRemoteResource]]></script <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("jms:SomeQueue?concurrentConsumers=20") .bean(MyClass.class); ]]></script> -</div></div><p>You can configure this option in one of the following ways:</p><ul><li>On the <code>JmsComponent</code>,</li><li>On the endpoint URI or,</li><li>By invoking <code>setConcurrentConsumers()</code> directly on the <code>JmsEndpoint</code>.</li></ul><h4 id="BookInOnePage-ConcurrentConsumingwithasyncconsumer">Concurrent Consuming with async consumer</h4><p>Notice that each concurrent consumer will only pickup the next available message from the JMS broker, when the current message has been fully processed. You can set the option <code>asyncConsumer=true</code> to let the consumer pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the <a shape="rect" href="asynchronous-routing-engine.html">Asynchronous Routing Engine</a>). See more details in the table on top of the page about the <code>asyncConsumer</code> option.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>You can configure this option in one of the following ways:</p><ul><li><p>On the <code>JmsComponent</code></p></li><li><p>On the endpoint URI.</p></li><li><p>By invoking <code>setConcurrentConsumers()</code> directly on the <code>JmsEndpoint</code>.</p></li></ul><h4 id="BookInOnePage-ConcurrentConsumingwithasyncconsumer">Concurrent Consuming with async consumer</h4><p>Notice that each concurrent consumer will only pickup the next available message from the JMS broker, when the current message has been fully processed. You can set the option <code>asyncConsumer=true</code> to let the consumer pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the <a shape="rect" href="asynchronous-routing-engine.html">Asynchronous Routing Engine</a>). See more details in the table on top of the page about the <code>asyncConsumer</code> option.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent pane lContent pdl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("jms:SomeQueue?concurrentConsumers=20&asyncConsumer=true") .bean(MyClass.class); ]]></script> @@ -21598,7 +21598,7 @@ from(aaa) .setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout")) .to("jms:queue:foo?replyTo=bar&requestTimeout=30s") .to("bean:processReply");]]></script> -</div></div><p>When you do fire and forget (<code>InOut</code>) over <a shape="rect" href="jms.html">JMS</a> Camel will, by default, <strong>not</strong> set a time to live value on the message. The value can be configured using the <code>timeToLive</code> option. For example to indicate a 5 sec., you set <code>timeToLive=5000</code>. The option <code>disableTimeToLive</code> can be used to force disabling the time to live, also for <code>InOnly</code> messaging. The <code>requestTimeout</code> option is not being used for <code>InOnly</code> messaging.</p><h3 id="BookInOnePage-EnablingTransactedConsumption">Enabling Transacted Consumption</h3><p><span class="confluence-anchor-link" id="BookInOnePage-transactedConsumption"></span></p><p>A common requirement is to consume from a queue in a transaction and then process the message using the Camel route. To do this, just ensure that you set the following properties on the component/endpoint:</p><ul><li><code>transacted = true </code></li><li><code>transactionManager</code> = <<em>Some</em><em>TransactionManager</em>> (typically the <code>JmsTransactionManager)</code></li></ul><p>See the <a shape="rect" href="transactional-client.html">Transactional Client</a> EIP pattern for further details.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Transactions and [Request Reply] over JMS</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When using <a shape="rect" href="request-reply.html">Request Reply</a> over JMS you cannot use a single transaction; JMS will not send any messages until a commit is performed, so the server side won't receive anything at all until the transaction commits. Therefore to use <a shape="rect" href="request-reply.html">Request Reply</a> you must commit a transaction after sending the request and then use a separate transaction for receiving the response.</p><p>To address this issue the JMS component uses different properties to specify transaction use for oneway messaging and request reply messaging:</p><ul><li>The <code>transacted</code> property applies <strong>only</strong> to the <code>InOnly</code> message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP).</li><li>The <code>transactedInOut</code> property applies to the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP). If you want to use transactions with the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP), you <strong>must</strong> set <code>transactedInOut=true</code>.</li></ul></div></div><p><strong>Avai lable as of Camel 2.10</strong></p><p>You can leverage the <a shape="rect" class="exte rnal-link" href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)" rel="nofollow">DMLC transacted session API</a> using the following properties on component/endpoint:</p><ul><li><code>transacted = true</code></li><li><code>lazyCreateTransactionManager = false</code></li></ul><p>The benefit of doing so is that the <code>cacheLevel</code> setting will be honored when using local transactions without a configured TransactionManager. When a TransactionManager is configured, no caching happens at DMLC level and its necessary to rely on a pooled connection factory. For more details about this kind of setup see <a shape="rect" class="external-link" href="http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html" rel="nofollow">here</a> and <a shape="rect" class="external-link" href="http://forum.springsource.org/showthread.php?123631-JMS-DMLC-not- caching connection-when-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530" rel="nofollow">here</a>.</p><h3 id="BookInOnePage-UsingJMSReplyToforlatereplies">Using JMSReplyTo for late replies</h3><p>When using Camel as a JMS listener, it sets an Exchange property with the value of the ReplyTo <strong><code>javax.jms.Destination</code></strong> object, having the key <code>ReplyTo</code>. You can obtain this <code>Destination</code> as follows:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>When you do fire and forget (<code>InOut</code>) over <a shape="rect" href="jms.html">JMS</a> Camel will, by default, <strong>not</strong> set a time to live value on the message. The value can be configured using the <code>timeToLive</code> option. For example to indicate a 5 sec., you set <code>timeToLive=5000</code>. The option <code>disableTimeToLive</code> can be used to force disabling the time to live, also for <code>InOnly</code> messaging. The <code>requestTimeout</code> option is not being used for <code>InOnly</code> messaging.</p><h3 id="BookInOnePage-EnablingTransactedConsumption">Enabling Transacted Consumption</h3><p><span class="confluence-anchor-link" id="BookInOnePage-transactedConsumption"></span></p><p>A common requirement is to consume from a queue in a transaction and then process the message using the Camel route. To do this, just ensure that you set the following properties on the component/endpoint:</p><ul><li><p><code>transacted = t rue</code></p></li><li><p><code>transactionManager</code> = <<em>Some</em><em>TransactionManager</em>> (typically the <code>JmsTransactionManager)</code></p></li></ul><p>See the <a shape="rect" href="transactional-client.html">Transactional Client</a> EIP pattern for further details.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Transactions and [Request Reply] over JMS</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When using <a shape="rect" href="request-reply.html">Request Reply</a> over JMS you cannot use a single transaction; JMS will not send any messages until a commit is performed, so the server side won't receive anything at all until the transaction commits. Therefore to use <a shape="rect" href="request-reply.html">Request Reply</a> you must commit a transaction after sending the request and then use a separa te transaction for receiving the response.</p><p>To address this issue the JMS component uses different properties to specify transaction use for oneway messaging and request reply messaging:</p><ul><li>The <code>transacted</code> property applies <strong>only</strong> to the <code>InOnly</code> message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP).</li><li>The <code>transactedInOut</code> property applies to the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP). If you want to use transactions with the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP), you <strong>must</strong> set <code>transactedInOut=true</code>.</li></ul></div></div><p><strong>Available as of Camel 2.10</strong></p><p>You can leverage the <a shape="rect " class="external-link" href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)" rel="nofollow">DMLC transacted session API</a> using the following properties on component/endpoint:</p><ul><li><p><code>transacted = true</code></p></li><li><p><code>lazyCreateTransactionManager = false</code></p></li></ul><p>The benefit of doing so is that the <code>cacheLevel</code> setting will be honored when using local transactions without a configured TransactionManager. When a TransactionManager is configured, no caching happens at DMLC level and its necessary to rely on a pooled connection factory. For more details about this kind of setup see <a shape="rect" class="external-link" href="http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html" rel="nofollow">here</a> and <a shape="rect" class="external-link" href="http://forum.springsource.org/showthre ad.php?123631-JMS-DMLC-not-caching connection-when-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530" rel="nofollow">here</a>.</p><h3 id="BookInOnePage-UsingJMSReplyToforlatereplies">Using JMSReplyTo for late replies</h3><p>When using Camel as a JMS listener, it sets an Exchange property with the value of the ReplyTo <strong><code>javax.jms.Destination</code></strong> object, having the key <code>ReplyTo</code>. You can obtain this <code>Destination</code> as follows:</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[Destination replyDestination = exchange.getIn().getHeader(JmsConstants.JMS_REPLY_DESTINATION, Destination.class); ]]></script> </div></div><p>And then later use it to send a reply using regular JMS or Camel.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -21690,7 +21690,7 @@ wmq.setDestinationResolver(new Destinati }); ]]></script> </div></div><p></p><h3 id="BookInOnePage-SeeAlso.52">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="transactional-client.html">Transactional Client</a></li><li><a shape="rect" href="bean-integration.html">Bean Integration</a></li><li><a shape="rect" href="tutorial-jmsremoting.html">Tutorial-JmsRemoting</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/jmstemplate-gotchas.html">JMSTemplate gotchas</a></li></ul> <h2 id="BookInOnePage-JMXComponent">JMX Component</h2> +<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="transactional-client.html">Transactional Client</a></li><li><a shape="rect" href="bean-integration.html">Bean Integration</a></li><li><a shape="rect" href="tutorial-jmsremoting.html">Tutorial-JmsRemoting</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/jmstemplate-gotchas.html">JMSTemplate gotchas</a></li></ul><div class="firebugResetStyles firebugBlockBackgroundColor firebugLayoutBox firebugLayoutBoxOffset" style="left: 10.0px;top: 307.0px;"><div class="firebugResetStyles firebugLayoutBox" style="padding: 10.0px 0.0px 0.0px;background-color: rgb(237,255,100);"><div class="firebugResetStyles firebugLayoutBox" style="padding: 1.0px;b ackground-color: rgb(68,68,68);"></div></div></div> <h2 id="BookInOnePage-JMXComponent">JMX Component</h2> <p><strong>Available as of Camel 2.6</strong></p> <h3 id="BookInOnePage-StandardJMXConsumerConfiguration">Standard JMX Consumer Configuration</h3> @@ -24214,7 +24214,61 @@ assertMockEndpointsSatisfied(); // which should have the value of {{stop}} key being looked up in the properties file .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="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </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 c lass="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:</p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>Notice how we use the <code>blueprint</code> scheme to refer to the OSG i 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:</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[<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 as needed --> + <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><p><span style="line-height: 1.42857;"><br clear="none"></span></p><p><span style="line-height: 1.42857;">By default Camel detects and uses OSGi blueprint property placeholder service. You can disable this by setting the attribute </span><code style="line-height: 1.42857;">useBlueprintPropertyResolver</code><span style="line-height: 1.42857;"> to false on the </span><code style="line-height: 1.42857;"><camelContext></code><span style="line-height: 1.42857;"> definition.</span></p><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 <cam elContext> 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:</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[<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 as needed --> + <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><p> </p><p>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"> Modified: websites/production/camel/content/cache/main.pageCache ============================================================================== Binary files - no diff available. Modified: websites/production/camel/content/jms.html ============================================================================== --- websites/production/camel/content/jms.html (original) +++ websites/production/camel/content/jms.html Tue Aug 2 18:19:51 2016 @@ -165,7 +165,7 @@ <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("jms:SomeQueue?concurrentConsumers=20") .bean(MyClass.class); ]]></script> -</div></div><p>You can configure this option in one of the following ways:</p><ul><li>On the <code>JmsComponent</code>,</li><li>On the endpoint URI or,</li><li>By invoking <code>setConcurrentConsumers()</code> directly on the <code>JmsEndpoint</code>.</li></ul><h4 id="JMS-ConcurrentConsumingwithasyncconsumer">Concurrent Consuming with async consumer</h4><p>Notice that each concurrent consumer will only pickup the next available message from the JMS broker, when the current message has been fully processed. You can set the option <code>asyncConsumer=true</code> to let the consumer pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the <a shape="rect" href="asynchronous-routing-engine.html">Asynchronous Routing Engine</a>). See more details in the table on top of the page about the <code>asyncConsumer</code> option.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>You can configure this option in one of the following ways:</p><ul><li><p>On the <code>JmsComponent</code></p></li><li><p>On the endpoint URI.</p></li><li><p>By invoking <code>setConcurrentConsumers()</code> directly on the <code>JmsEndpoint</code>.</p></li></ul><h4 id="JMS-ConcurrentConsumingwithasyncconsumer">Concurrent Consuming with async consumer</h4><p>Notice that each concurrent consumer will only pickup the next available message from the JMS broker, when the current message has been fully processed. You can set the option <code>asyncConsumer=true</code> to let the consumer pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the <a shape="rect" href="asynchronous-routing-engine.html">Asynchronous Routing Engine</a>). See more details in the table on top of the page about the <code>asyncConsumer</code> option.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent p dl"> <script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[from("jms:SomeQueue?concurrentConsumers=20&asyncConsumer=true") .bean(MyClass.class); ]]></script> @@ -215,7 +215,7 @@ from(aaa) .setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout")) .to("jms:queue:foo?replyTo=bar&requestTimeout=30s") .to("bean:processReply");]]></script> -</div></div><p>When you do fire and forget (<code>InOut</code>) over <a shape="rect" href="jms.html">JMS</a> Camel will, by default, <strong>not</strong> set a time to live value on the message. The value can be configured using the <code>timeToLive</code> option. For example to indicate a 5 sec., you set <code>timeToLive=5000</code>. The option <code>disableTimeToLive</code> can be used to force disabling the time to live, also for <code>InOnly</code> messaging. The <code>requestTimeout</code> option is not being used for <code>InOnly</code> messaging.</p><h3 id="JMS-EnablingTransactedConsumption">Enabling Transacted Consumption</h3><p><span class="confluence-anchor-link" id="JMS-transactedConsumption"></span></p><p>A common requirement is to consume from a queue in a transaction and then process the message using the Camel route. To do this, just ensure that you set the following properties on the component/endpoint:</p><ul><li><code>transacted = true</code></li><li><cod e>transactionManager</code> = <<em>Some</em><em>TransactionManager</em>> (typically the <code>JmsTransactionManager)</code></li></ul><p>See the <a shape="rect" href="transactional-client.html">Transactional Client</a> EIP pattern for further details.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Transactions and [Request Reply] over JMS</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When using <a shape="rect" href="request-reply.html">Request Reply</a> over JMS you cannot use a single transaction; JMS will not send any messages until a commit is performed, so the server side won't receive anything at all until the transaction commits. Therefore to use <a shape="rect" href="request-reply.html">Request Reply</a> you must commit a transaction after sending the request and then use a separate transaction for receiving the r esponse.</p><p>To address this issue the JMS component uses different properties to specify transaction use for oneway messaging and request reply messaging:</p><ul><li>The <code>transacted</code> property applies <strong>only</strong> to the <code>InOnly</code> message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP).</li><li>The <code>transactedInOut</code> property applies to the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP). If you want to use transactions with the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP), you <strong>must</strong> set <code>transactedInOut=true</code>.</li></ul></div></div><p><strong>Avai lable as of Camel 2.10</strong></p><p>You can leverage the <a shape="rect" class="external-link" href="htt p://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)" rel="nofollow">DMLC transacted session API</a> using the following properties on component/endpoint:</p><ul><li><code>transacted = true</code></li><li><code>lazyCreateTransactionManager = false</code></li></ul><p>The benefit of doing so is that the <code>cacheLevel</code> setting will be honored when using local transactions without a configured TransactionManager. When a TransactionManager is configured, no caching happens at DMLC level and its necessary to rely on a pooled connection factory. For more details about this kind of setup see <a shape="rect" class="external-link" href="http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html" rel="nofollow">here</a> and <a shape="rect" class="external-link" href="http://forum.springsource.org/showthread.php?123631-JMS-DMLC-not-caching connection-w hen-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530" rel="nofollow">here</a>.</p><h3 id="JMS-UsingJMSReplyToforlatereplies">Using JMSReplyTo for late replies</h3><p>When using Camel as a JMS listener, it sets an Exchange property with the value of the ReplyTo <strong><code>javax.jms.Destination</code></strong> object, having the key <code>ReplyTo</code>. You can obtain this <code>Destination</code> as follows:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>When you do fire and forget (<code>InOut</code>) over <a shape="rect" href="jms.html">JMS</a> Camel will, by default, <strong>not</strong> set a time to live value on the message. The value can be configured using the <code>timeToLive</code> option. For example to indicate a 5 sec., you set <code>timeToLive=5000</code>. The option <code>disableTimeToLive</code> can be used to force disabling the time to live, also for <code>InOnly</code> messaging. The <code>requestTimeout</code> option is not being used for <code>InOnly</code> messaging.</p><h3 id="JMS-EnablingTransactedConsumption">Enabling Transacted Consumption</h3><p><span class="confluence-anchor-link" id="JMS-transactedConsumption"></span></p><p>A common requirement is to consume from a queue in a transaction and then process the message using the Camel route. To do this, just ensure that you set the following properties on the component/endpoint:</p><ul><li><p><code>transacted = true</code></p></li>< li><p><code>transactionManager</code> = <<em>Some</em><em>TransactionManager</em>> (typically the <code>JmsTransactionManager)</code></p></li></ul><p>See the <a shape="rect" href="transactional-client.html">Transactional Client</a> EIP pattern for further details.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Transactions and [Request Reply] over JMS</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When using <a shape="rect" href="request-reply.html">Request Reply</a> over JMS you cannot use a single transaction; JMS will not send any messages until a commit is performed, so the server side won't receive anything at all until the transaction commits. Therefore to use <a shape="rect" href="request-reply.html">Request Reply</a> you must commit a transaction after sending the request and then use a separate transaction for r eceiving the response.</p><p>To address this issue the JMS component uses different properties to specify transaction use for oneway messaging and request reply messaging:</p><ul><li>The <code>transacted</code> property applies <strong>only</strong> to the <code>InOnly</code> message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP).</li><li>The <code>transactedInOut</code> property applies to the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP). If you want to use transactions with the <code>InOut</code> (<a shape="rect" href="request-reply.html">Request Reply</a>) message <a shape="rect" href="exchange-pattern.html">Exchange Pattern</a> (MEP), you <strong>must</strong> set <code>transactedInOut=true</code>.</li></ul></div></div><p><strong>Available as of Camel 2.10</strong></p><p>You can leverage the <a shape="rect" class="external-li nk" href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)" rel="nofollow">DMLC transacted session API</a> using the following properties on component/endpoint:</p><ul><li><p><code>transacted = true</code></p></li><li><p><code>lazyCreateTransactionManager = false</code></p></li></ul><p>The benefit of doing so is that the <code>cacheLevel</code> setting will be honored when using local transactions without a configured TransactionManager. When a TransactionManager is configured, no caching happens at DMLC level and its necessary to rely on a pooled connection factory. For more details about this kind of setup see <a shape="rect" class="external-link" href="http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html" rel="nofollow">here</a> and <a shape="rect" class="external-link" href="http://forum.springsource.org/showthread.php?123631-JMS-DM LC-not-caching connection-when-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530" rel="nofollow">here</a>.</p><h3 id="JMS-UsingJMSReplyToforlatereplies">Using JMSReplyTo for late replies</h3><p>When using Camel as a JMS listener, it sets an Exchange property with the value of the ReplyTo <strong><code>javax.jms.Destination</code></strong> object, having the key <code>ReplyTo</code>. You can obtain this <code>Destination</code> as follows:</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[Destination replyDestination = exchange.getIn().getHeader(JmsConstants.JMS_REPLY_DESTINATION, Destination.class); ]]></script> </div></div><p>And then later use it to send a reply using regular JMS or Camel.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> @@ -307,7 +307,7 @@ wmq.setDestinationResolver(new Destinati }); ]]></script> </div></div><p></p><h3 id="JMS-SeeAlso">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="transactional-client.html">Transactional Client</a></li><li><a shape="rect" href="bean-integration.html">Bean Integration</a></li><li><a shape="rect" href="tutorial-jmsremoting.html">Tutorial-JmsRemoting</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/jmstemplate-gotchas.html">JMSTemplate gotchas</a></li></ul></div> +<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="transactional-client.html">Transactional Client</a></li><li><a shape="rect" href="bean-integration.html">Bean Integration</a></li><li><a shape="rect" href="tutorial-jmsremoting.html">Tutorial-JmsRemoting</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/jmstemplate-gotchas.html">JMSTemplate gotchas</a></li></ul><div class="firebugResetStyles firebugBlockBackgroundColor firebugLayoutBox firebugLayoutBoxOffset" style="left: 10.0px;top: 307.0px;"><div class="firebugResetStyles firebugLayoutBox" style="padding: 10.0px 0.0px 0.0px;background-color: rgb(237,255,100);"><div class="firebugResetStyles firebugLayoutBox" style="padding: 1.0px;b ackground-color: rgb(68,68,68);"></div></div></div></div> </td> <td valign="top"> <div class="navigation"> Modified: websites/production/camel/content/properties.html ============================================================================== --- websites/production/camel/content/properties.html (original) +++ websites/production/camel/content/properties.html Tue Aug 2 18:19:51 2016 @@ -295,7 +295,61 @@ assertMockEndpointsSatisfied(); // which should have the value of {{stop}} key being looked up in the properties file .multicast().placeholder("stopOnException", "stop") .to("mock:a").throwException(new IllegalAccessException("Damn")).to("mock:b");]]></script> -</div></div><h3 id="Properties-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="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </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 clas s="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:</p><div class="error"><span class="error">Error formatting macro: snippet: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20</span> </div>Notice how we use the <code>blueprint</code> scheme to refer to the OSGi b lueprint 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="Properties-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="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 as needed --> + <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><p><span style="line-height: 1.42857;"><br clear="none"></span></p><p><span style="line-height: 1.42857;">By default Camel detects and uses OSGi blueprint property placeholder service. You can disable this by setting the attribute </span><code style="line-height: 1.42857;">useBlueprintPropertyResolver</code><span style="line-height: 1.42857;"> to false on the </span><code style="line-height: 1.42857;"><camelContext></code><span style="line-height: 1.42857;"> definition.</span></p><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 <cam elContext> 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:</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[<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 as needed --> + <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><p> </p><p>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="Properties-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">