Modified: websites/production/camel/content/properties.html
==============================================================================
--- websites/production/camel/content/properties.html (original)
+++ websites/production/camel/content/properties.html Fri Aug 25 09:20:43 2017
@@ -40,8 +40,6 @@
   <link href='//camel.apache.org/styles/highlighter/styles/shThemeCamel.css' 
rel='stylesheet' type='text/css' />
   <script src='//camel.apache.org/styles/highlighter/scripts/shCore.js' 
type='text/javascript'></script>
   <script src='//camel.apache.org/styles/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script>
-  <script src='//camel.apache.org/styles/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script>
-  <script src='//camel.apache.org/styles/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script>
   
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
@@ -92,585 +90,305 @@
 </div></div><p>Where <strong><code>key</code></strong> is the key for the 
property to be looked up.</p><h3 id="Properties-Options">Options</h3><div 
class="confluenceTableSmall"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Option</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>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>true</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Whether or not to cache loaded 
properties.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>encoding</code></p></td><td colspan="1" 
rowspan="1" class="conflu
 enceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.14.3/2.15.1:</strong> The charset to 
use when loading properties, such as 
<strong><code>UTF-8</code></strong>.</p><p>The default charset is: 
<strong><code>ISO-8859-1</code></strong> 
(<strong><code>latin1</code></strong>).</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>fallbackToUnaugmentedProperty</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9</strong> If 
<strong><code>true</code></strong>, first attempt resolution of property name 
augmented with <strong><code>propertyPrefix</code></strong> and 
<strong><code>propertySuffix</code></strong> before falling back the plain 
property nam
 e specified.</p><p>If <strong><code>false</code></strong>, only the augmented 
property name is searched.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>defaultFallbackEnabled</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.19</strong>: 
If&#160;<strong><code>false</code></strong> the component will not attempt to 
find a default for the key by looking after the colon 
separator.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>ignoreMissingLocation</code></p></td><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>boolean</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.10:</strong> Whether to 
silently ignore if a location ca
 nnot be located, such as a properties file not found.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>locations</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>A comma separated list of one or more 
locations of property files to be loaded. Property resolution will use the 
given property files exclusively. Any default location(s) are 
ignored.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>prefixToken</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>{{</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9</strong> This token is 
used to mark the start of a property placeholder 
definition.</p></td></tr><tr><td colspan="1" rows
 pan="1" class="confluenceTd"><p><code>propertyPrefix</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.9</strong> An 
optional prefix that's <em>prepended</em> to each property name prior to 
resolution.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>propertySuffix</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><strong>Camel 2.9</strong> An optional 
suffix that's <em>appended</em> to each property name prior to 
resolution.</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>suffixToken</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>}}<br 
clear="none"></code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><strong>Camel 2.9</strong> This token is used to mark 
the end of a property placeholder definition.</p></td></tr><tr><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p><code>systemPropertiesMode</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>2</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><strong>Camel 2.16</strong> The 
mode to use for whether to resolve and use system 
properties:</p><p><strong><code>0</code></strong>&#160;= never - JVM system 
properties are never used.<br 
clear="none"><strong><code>1</code></strong>&#160;= fallback - JVM system 
properties are only used as fallback if no regular property with the key 
exists.<br clear="none"><strong><code>2</code></strong>&#160;= override - JVM 
system properties
  are used if exists, otherwise the regular property will be used.</p><div 
class="confluence-information-macro confluence-information-macro-warning"><p 
class="title">Bridging Spring and Camel Property Placeholders</p><span 
class="aui-icon aui-icon-small aui-iconfont-error 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">When bridging to Spring's property 
placeholder using 
<strong><code>org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer</code></strong>
 the configuration on 
<strong><code>BridgePropertyPlaceholderConfigurer</code></strong> will take 
precedence over the configuration on the 
<strong><code>PropertiesComponent</code></strong>.&#160;</div></div></td></tr></tbody></table></div></div>
 
 
-<div class="confluence-information-macro confluence-information-macro-tip"><p 
class="title">Resolving property from Java code</p><span class="aui-icon 
aui-icon-small aui-iconfont-approve 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>You can use the method 
<strong><code>resolvePropertyPlaceholders</code></strong> on the 
<strong><code>CamelContext</code></strong> to resolve a property from any Java 
code.</p></div></div><p></p><h2 
id="Properties-UsingPropertyPlaceholder">Using&#160;<strong><code>PropertyPlaceholder</code></strong></h2><p><strong>Available
 as of Camel 2.3</strong></p><p>Camel now provides a new 
<strong><code>PropertiesComponent</code></strong> 
in&#160;<strong><code>camel-core</code></strong> which allows you to use 
property placeholders when defining Camel <a shape="rect" 
href="endpoint.html">Endpoint</a> URIs. This works much like you would do if 
using Spring's <strong><code>&lt;property-placeholder&gt;</code></strong> tag.
  However Spring has a limitation that prevents third-party frameworks from 
fully leveraging Spring property placeholders.</p><p>For more details see: <a 
shape="rect" 
href="how-do-i-use-spring-property-placeholder-with-camel-xml.html">How do I 
use Spring Property Placeholder with Camel XML</a>.</p><div 
class="confluence-information-macro confluence-information-macro-tip"><p 
class="title">Bridging Spring and Camel Property Placeholders</p><span 
class="aui-icon aui-icon-small aui-iconfont-approve 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>From <strong>Camel 2.10</strong>: 
Spring's property placeholder can be bridged with Camel's. See below for more 
details.</p></div></div><p>The property placeholder is typically used when 
trying to do any of the following:</p><ul class="alternate"><li>Lookup or 
creating endpoints.</li><li>Lookup of beans in the <a shape="rect" 
href="registry.html">Registry.</a></li><li>Additional supported in Spring XML 
 (see below in examples).</li><li>Using 
Blueprint&#160;<strong><code>PropertyPlaceholder</code></strong> with Camel <a 
shape="rect" href="properties.html">Properties</a> component.</li><li>Using 
<strong><code>@PropertyInject</code></strong> to inject a property in a 
POJO.</li><li><strong>Camel 2.14.1</strong> Using default value if a property 
does not exists.</li><li><strong>Camel 2.14.1</strong> Include out of the box 
functions, to lookup property values from OS environment variables, JVM system 
properties, or the service idiom.</li><li><strong>Camel 2.14.1</strong> Using 
custom functions, which can be plugged into the property 
component.</li></ul><h3 id="Properties-Format">Format</h3><p>The value of a 
Camel property can be obtained by specifying its key name within a property 
placeholder, using the following format: 
<strong>{{<code>key</code>}}</strong>.</p><p>For example:</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[{{file.uri}}]]></script>
-</div></div><p>where <strong><code>file.uri</code></strong> is the property 
key.</p><p>Property placeholders can be used to specify parts, or all, of an 
endpoint's URI by embedding one or more placeholders in the URI's string 
definition.</p><p>From&#160;<strong>Camel 2.14.1</strong>: you can specify a 
default value to use if a property with the key does not exists, e.g., 
<strong><code>file.url:/some/path</code></strong> where the default value is 
the text after the colon, e.g., 
<strong><code>/some/path</code></strong>.</p><div 
class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>From <strong>Camel 
2.14.1</strong>: do <em>not</em> use a colon in the property key. The colon 
character is used as a token separator when providing a default 
value.</p></div></div><h3 id="Properties-UsingPropertyResolver">Using&#160;<code
 >PropertyResolver</code></h3><p>Camel provides a pluggable mechanism that 
 >allows third-parties to specify their own resolver to use for the lookup of 
 >properties.</p><p>Camel provides a default implementation 
 ><strong><code>org.apache.camel.component.properties.DefaultPropertiesResolver</code></strong>
 > which is capable of loading properties from the file system, classpath or <a 
 >shape="rect" href="registry.html">Registry</a>. To indicate which source to 
 >use the location must contain the appropriate prefix.</p><p>The list of 
 >prefixes is:</p><div class="table-wrap"><table 
 >class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
 >class="confluenceTh"><p>Prefix</p></th><th colspan="1" rowspan="1" 
 >class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p><code>ref:</code></p></td><td colspan="1" 
 >rowspan="1" class="confluenceTd"><p>Lookup in the <a shape="rect" 
 >href="registry.html">Registry.</a></p></td></tr><tr><td colspan="1" 
 >rowspan="1" 
 class="confluenceTd"><p><code>file:</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Load the from file system.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>classpath:</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Load from the classpath (this is also the 
default if no prefix is provided).</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>blueprint:</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Use a specific OSGi blueprint placeholder 
service.</p></td></tr></tbody></table></div><h3 
id="Properties-DefiningLocation">Defining Location</h3><p>The 
<strong><code>PropertiesResolver</code></strong> must be configured with the 
location(s) to use when resolving properties. One or more locations can be 
given. Specifying multiple locations can be done a couple of ways: using either 
a single comma separated string, or an array of strings.</p><div class="code 
panel pdl" style="borde
 r-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[pc.setLocation(&quot;com/mycompany/myprop.properties,com/mycompany/other.properties&quot;);
-pc.setLocation(new String[] {&quot;com/mycompany/myprop.properties&quot;, 
&quot;com/mycompany/other.properties&quot;}); ]]></script>
-</div></div><div><p>From<strong> Camel 2.19.0</strong>: you can set which 
location can be discarded if missing by setting&#160; 
<strong><code>optional=true</code></strong>, 
(<strong><code>false</code></strong> by 
default).</p><p>Example:</p></div><div><p>&#160;</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[pc.setLocations(&quot;com/mycompany/override.properties;optional=true,com/mycompany/defaults.properties&quot;);]]></script>
-</div></div><p>&#160;</p></div><h4 
id="Properties-UsingSystemandEnvironmentVariablesinLocations">Using System and 
Environment Variables in Locations</h4><p><strong>Available as of Camel 
2.7</strong></p><p>The location now supports using placeholders for JVM system 
properties and OS environments variables.</p><p>Example:</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=file:${karaf.home}/etc/foo.properties
-]]></script>
-</div></div><p>In the location above we defined a location using the file 
scheme using the JVM system property with key 
<strong><code>karaf.home</code></strong>.</p><p>To use an OS environment 
variable instead you would have to prefix with 
<strong><code>env</code></strong>:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[location=file:${env:APP_HOME}/etc/foo.properties
-]]></script>
-</div></div><p>Where <strong><code>APP_HOME</code></strong> is an OS 
environment variable.</p><p>You can have multiple placeholders in the same 
location, such as:</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=file:${env:APP_HOME}/etc/${prop.name}.properties
-]]></script>
-</div></div><h4 
id="Properties-UsingSystemorEnvironmentVariablestoConfigurePropertyPrefixesandSuffixes">Using
 System or Environment Variables to Configure Property Prefixes and 
Suffixes</h4><p>From<strong> Camel 2.12.5, 2.13.3, 
2.14.0</strong>:<strong><code> propertyPrefix</code></strong>, 
<strong><code>propertySuffix</code></strong> configuration properties support 
the use of placeholders for de-referencing JVM system properties and OS 
environments variables.</p><p>Example:</p><p>Assume the 
<strong><code>PropertiesComponent</code></strong> is configured with the 
following properties file:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="brush: text; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[dev.endpoint = result1
-test.endpoint = result2]]></script>
-</div></div><p>The same properties file is then referenced from a route 
definition:</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[PropertiesComponent pc = 
context.getComponent(&quot;properties&quot;, PropertiesComponent.class);
-pc.setPropertyPrefix(&quot;${stage}.&quot;);
+<div class="confluence-information-macro confluence-information-macro-tip"><p 
class="title">Resolving property from Java code</p><span class="aui-icon 
aui-icon-small aui-iconfont-approve 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>You can use the method 
<strong><code>resolvePropertyPlaceholders</code></strong> on the 
<strong><code>CamelContext</code></strong> to resolve a property from any Java 
code.</p></div></div><p></p><h2 
id="Properties-UsingPropertyPlaceholder">Using&#160;<strong><code>PropertyPlaceholder</code></strong></h2><p><strong>Available
 as of Camel 2.3</strong></p><p>Camel now provides a new 
<strong><code>PropertiesComponent</code></strong> 
in&#160;<strong><code>camel-core</code></strong> which allows you to use 
property placeholders when defining Camel <a shape="rect" 
href="endpoint.html">Endpoint</a> URIs. This works much like you would do if 
using Spring's <strong><code>&lt;property-placeholder&gt;</code></strong> tag.
  However Spring has a limitation that prevents third-party frameworks from 
fully leveraging Spring property placeholders.</p><p>For more details see: <a 
shape="rect" 
href="how-do-i-use-spring-property-placeholder-with-camel-xml.html">How do I 
use Spring Property Placeholder with Camel XML</a>.</p><parameter 
ac:name="title">Bridging Spring and Camel Property 
Placeholders</parameter><rich-text-body><p>From <strong>Camel 2.10</strong>: 
Spring's property placeholder can be bridged with Camel's. See below for more 
details.</p></rich-text-body><p>The property placeholder is typically used when 
trying to do any of the following:</p><ul class="alternate"><li>Lookup or 
creating endpoints.</li><li>Lookup of beans in the <a shape="rect" 
href="registry.html">Registry.</a></li><li>Additional supported in Spring XML 
(see below in examples).</li><li>Using 
Blueprint&#160;<strong><code>PropertyPlaceholder</code></strong> with Camel <a 
shape="rect" href="properties.html">Properties</a> component.</li
 ><li>Using <strong><code>@PropertyInject</code></strong> to inject a property 
 >in a POJO.</li><li><strong>Camel 2.14.1</strong> Using default value if a 
 >property does not exists.</li><li><strong>Camel 2.14.1</strong> Include out 
 >of the box functions, to lookup property values from OS environment 
 >variables, JVM system properties, or the service idiom.</li><li><strong>Camel 
 >2.14.1</strong> Using custom functions, which can be plugged into the 
 >property component.</li></ul><h3 id="Properties-Format">Format</h3><p>The 
 >value of a Camel property can be obtained by specifying its key name within a 
 >property placeholder, using the following format: 
 ><strong>{{<code>key</code>}}</strong>.</p><p>For 
 >example:</p><plain-text-body>{{file.uri}}</plain-text-body><p>where 
 ><strong><code>file.uri</code></strong> is the property key.</p><p>Property 
 >placeholders can be used to specify parts, or all, of an endpoint's URI by 
 >embedding one or more placeholders in the URI's string 
 >definition.</p><p>From&#160;<
 strong>Camel 2.14.1</strong>: you can specify a default value to use if a 
property with the key does not exists, e.g., 
<strong><code>file.url:/some/path</code></strong> where the default value is 
the text after the colon, e.g., 
<strong><code>/some/path</code></strong>.</p><rich-text-body><p>From 
<strong>Camel 2.14.1</strong>: do <em>not</em> use a colon in the property key. 
The colon character is used as a token separator when providing a default 
value.</p></rich-text-body><h3 
id="Properties-UsingPropertyResolver">Using&#160;<code>PropertyResolver</code></h3><p>Camel
 provides a pluggable mechanism that allows third-parties to specify their own 
resolver to use for the lookup of properties.</p><p>Camel provides a default 
implementation 
<strong><code>org.apache.camel.component.properties.DefaultPropertiesResolver</code></strong>
 which is capable of loading properties from the file system, classpath or <a 
shape="rect" href="registry.html">Registry</a>. To indicate which source to use 
th
 e location must contain the appropriate prefix.</p><p>The list of prefixes 
is:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th 
colspan="1" rowspan="1" class="confluenceTh"><p>Prefix</p></th><th colspan="1" 
rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td 
colspan="1" rowspan="1" class="confluenceTd"><p><code>ref:</code></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p>Lookup in the <a shape="rect" 
href="registry.html">Registry.</a></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>file:</code></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>Load the from file system.</p></td></tr><tr><td 
colspan="1" rowspan="1" 
class="confluenceTd"><p><code>classpath:</code></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p>Load from the classpath (this is also the 
default if no prefix is provided).</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><code>blueprint:</code></p></td>
 <td colspan="1" rowspan="1" class="confluenceTd"><p>Use a specific OSGi 
blueprint placeholder service.</p></td></tr></tbody></table></div><h3 
id="Properties-DefiningLocation">Defining Location</h3><p>The 
<strong><code>PropertiesResolver</code></strong> must be configured with the 
location(s) to use when resolving properties. One or more locations can be 
given. Specifying multiple locations can be done a couple of ways: using either 
a single comma separated string, or an array of strings.</p><parameter 
ac:name="language">java</parameter><plain-text-body>pc.setLocation("com/mycompany/myprop.properties,com/mycompany/other.properties");
+pc.setLocation(new String[] {"com/mycompany/myprop.properties", 
"com/mycompany/other.properties"});&#160;</plain-text-body><div><p>From<strong> 
Camel 2.19.0</strong>: you can set which location can be discarded if missing 
by setting&#160; <strong><code>optional=true</code></strong>, 
(<strong><code>false</code></strong> by 
default).</p><p>Example:</p></div><div><p>&#160;</p><parameter 
ac:name="language">java</parameter><plain-text-body>pc.setLocations("com/mycompany/override.properties;optional=true,com/mycompany/defaults.properties");</plain-text-body><p>&#160;</p></div><h4
 id="Properties-UsingSystemandEnvironmentVariablesinLocations">Using System and 
Environment Variables in Locations</h4><p><strong>Available as of Camel 
2.7</strong></p><p>The location now supports using placeholders for JVM system 
properties and OS environments 
variables.</p><p>Example:</p><plain-text-body>location=file:${karaf.home}/etc/foo.properties
+</plain-text-body><p>In the location above we defined a location using the 
file scheme using the JVM system property with key 
<strong><code>karaf.home</code></strong>.</p><p>To use an OS environment 
variable instead you would have to prefix with 
<strong><code>env</code></strong>:</p><plain-text-body>location=file:${env:APP_HOME}/etc/foo.properties
+</plain-text-body><p>Where <strong><code>APP_HOME</code></strong> is an OS 
environment variable.</p><p>You can have multiple placeholders in the same 
location, such 
as:</p><plain-text-body>location=file:${env:APP_HOME}/etc/${prop.name}.properties
+</plain-text-body><h4 
id="Properties-UsingSystemorEnvironmentVariablestoConfigurePropertyPrefixesandSuffixes">Using
 System or Environment Variables to Configure Property Prefixes and 
Suffixes</h4><p>From<strong> Camel 2.12.5, 2.13.3, 
2.14.0</strong>:<strong><code> propertyPrefix</code></strong>, 
<strong><code>propertySuffix</code></strong> configuration properties support 
the use of placeholders for de-referencing JVM system properties and OS 
environments variables.</p><p>Example:</p><p>Assume the 
<strong><code>PropertiesComponent</code></strong> is configured with the 
following properties file:</p><parameter 
ac:name="language">text</parameter><plain-text-body>dev.endpoint = result1
+test.endpoint = result2</plain-text-body><p>The same properties file is then 
referenced from a route definition:</p><parameter 
ac:name="language">java</parameter><plain-text-body>PropertiesComponent pc = 
context.getComponent("properties", PropertiesComponent.class);
+pc.setPropertyPrefix("${stage}.");
 
 // ...
 context.addRoutes(new RouteBuilder() {
     @Override
     public void configure() throws Exception {
-        from(&quot;direct:start&quot;)
-          .to(&quot;properties:mock:{{endpoint}}&quot;);
+        from("direct:start")
+          .to("properties:mock:{{endpoint}}");
     }
-});]]></script>
-</div></div><p>By using the configuration options 
<strong><code>propertyPrefix</code></strong> it's possible to change the target 
endpoint simply by changing the value of the system 
property&#160;<strong><code>stage</code></strong> either 
to&#160;<strong><code>dev</code></strong> (the message will be routed 
to&#160;<strong><code>mock:result1</code></strong>) 
or&#160;<strong><code>test</code></strong> (the message will be routed 
to&#160;<strong><code>mock:result2</code></strong>).</p><h3 
id="Properties-ConfiguringinJavaDSL">Configuring in Java DSL</h3><p>You have to 
create and register the <strong><code>PropertiesComponent</code></strong> under 
the name <strong><code>properties</code></strong> such as:</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[PropertiesComponent pc = new 
PropertiesComponent();
-pc.setLocation(&quot;classpath:com/mycompany/myprop.properties&quot;);
-context.addComponent(&quot;properties&quot;, pc);
-]]></script>
-</div></div><h3 id="Properties-ConfiguringinSpringXML">Configuring in Spring 
XML</h3><p>Spring XML offers two variations to configure. You can define a 
spring bean as a <strong><code>PropertiesComponent</code></strong> which 
resembles the way done in Java DSL. Or you can use the 
<strong><code>&lt;propertyPlaceholder&gt;</code></strong> tag.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;bean id=&quot;properties&quot; 
class=&quot;org.apache.camel.component.properties.PropertiesComponent&quot;&gt;
-    &lt;property name=&quot;location&quot; 
value=&quot;classpath:com/mycompany/myprop.properties&quot;/&gt;
+});</plain-text-body><p>By using the configuration options 
<strong><code>propertyPrefix</code></strong> it's possible to change the target 
endpoint simply by changing the value of the system 
property&#160;<strong><code>stage</code></strong> either 
to&#160;<strong><code>dev</code></strong> (the message will be routed 
to&#160;<strong><code>mock:result1</code></strong>) 
or&#160;<strong><code>test</code></strong> (the message will be routed 
to&#160;<strong><code>mock:result2</code></strong>).</p><h3 
id="Properties-ConfiguringinJavaDSL">Configuring in Java DSL</h3><p>You have to 
create and register the <strong><code>PropertiesComponent</code></strong> under 
the name <strong><code>properties</code></strong> such as:</p><parameter 
ac:name="language">java</parameter><plain-text-body>PropertiesComponent pc = 
new PropertiesComponent();
+pc.setLocation("classpath:com/mycompany/myprop.properties");
+context.addComponent("properties", pc);
+</plain-text-body><h3 id="Properties-ConfiguringinSpringXML">Configuring in 
Spring XML</h3><p>Spring XML offers two variations to configure. You can define 
a spring bean as a <strong><code>PropertiesComponent</code></strong> which 
resembles the way done in Java DSL. Or you can use the 
<strong><code>&lt;propertyPlaceholder&gt;</code></strong> tag.</p><parameter 
ac:name="language">xml</parameter><plain-text-body>&lt;bean id="properties" 
class="org.apache.camel.component.properties.PropertiesComponent"&gt;
+    &lt;property name="location" 
value="classpath:com/mycompany/myprop.properties"/&gt;
 &lt;/bean&gt;
-]]></script>
-</div></div><p>Using the 
<strong><code>&lt;propertyPlaceholder&gt;</code></strong> tag makes the 
configuration a bit more fresh such as:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;camelContext ...&gt;
-   &lt;propertyPlaceholder id=&quot;properties&quot; 
location=&quot;com/mycompany/myprop.properties&quot;/&gt;
+</plain-text-body><p>Using the 
<strong><code>&lt;propertyPlaceholder&gt;</code></strong> tag makes the 
configuration a bit more fresh such as:</p><parameter 
ac:name="language">xml</parameter><plain-text-body>&lt;camelContext ...&gt;
+   &lt;propertyPlaceholder id="properties" 
location="com/mycompany/myprop.properties"/&gt;
 &lt;/camelContext&gt;
-]]></script>
-</div></div><p><span>Setting the properties location through the location tag 
works just fine but sometime you have a number of resources to take into 
account and starting from&#160;</span><strong>Camel 
2.19.0</strong><span>&#160;you can set the properties location with a dedicated 
<strong><code>propertiesLocation</code></strong>:</span></p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;camelContext ...&gt;
-  &lt;propertyPlaceholder id=&quot;myPropertyPlaceholder&quot;&gt;
+</plain-text-body><p><span>Setting the properties location through the 
location tag works just fine but sometime you have a number of resources to 
take into account and starting from&#160;</span><strong>Camel 
2.19.0</strong><span>&#160;you can set the properties location with a dedicated 
<strong><code>propertiesLocation</code></strong>:</span></p><parameter 
ac:name="language">xml</parameter><plain-text-body>&lt;camelContext ...&gt;
+  &lt;propertyPlaceholder id="myPropertyPlaceholder"&gt;
     &lt;propertiesLocation
-      resolver = &quot;classpath&quot;
-      path     = 
&quot;com/my/company/something/my-properties-1.properties&quot;
-      optional = &quot;false&quot;/&gt;
+      resolver = "classpath"
+      path     = "com/my/company/something/my-properties-1.properties"
+      optional = "false"/&gt;
     &lt;propertiesLocation
-      resolver = &quot;classpath&quot;
-      path     = 
&quot;com/my/company/something/my-properties-2.properties&quot;
-      optional = &quot;false&quot;/&gt;
+      resolver = "classpath"
+      path     = "com/my/company/something/my-properties-2.properties"
+      optional = "false"/&gt;
     &lt;propertiesLocation
-      resolver = &quot;file&quot;
-      path     = &quot;${karaf.home}/etc/my-override.properties&quot;
-      optional = &quot;true&quot;/&gt;
+      resolver = "file"
+      path     = "${karaf.home}/etc/my-override.properties"
+      optional = "true"/&gt;
    &lt;/propertyPlaceholder&gt;
-&lt;/camelContext&gt;]]></script>
-</div></div><div class="confluence-information-macro 
confluence-information-macro-tip"><p class="title">Specifying the cache option 
in XML</p><span class="aui-icon aui-icon-small aui-iconfont-approve 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>From <strong>Camel 2.10</strong>: 
Camel supports specifying a value for 
the&#160;<strong><code>cache</code></strong> option both inside the Spring as 
well as the Blueprint XML.</p></div></div><h3 
id="Properties-UsingaPropertiesfromthe">Using a Properties from the <a 
shape="rect" href="registry.html">Registry</a></h3><p><strong>Available as of 
Camel 2.4</strong><br clear="none"> For example in OSGi you may want to expose 
a service which returns the properties as a 
<strong><code>java.util.Properties</code></strong> object.</p><p>Then you could 
setup the <a shape="rect" href="properties.html">Properties</a> component as 
follows:</p><div class="code panel pdl" style="border-width: 1px;"><div class="c
 odeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;propertyPlaceholder 
id=&quot;properties&quot; location=&quot;ref:myProperties&quot;/&gt;
-]]></script>
-</div></div><p>Where <strong><code>myProperties</code></strong> is the id to 
use for lookup in the OSGi registry. Notice we use the 
<strong><code>ref:</code></strong> prefix to tell Camel that it should lookup 
the properties for the <a shape="rect" 
href="registry.html">Registry</a>.</p><h3 
id="Properties-ExamplesUsingPropertiesComponent">Examples Using Properties 
Component</h3><p>When using property placeholders in the endpoint URIs you can 
either use the <strong><code>properties:</code></strong> component or define 
the placeholders directly in the URI. We will show example of both cases, 
starting with the former.</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[// properties
+&lt;/camelContext&gt;</plain-text-body><parameter ac:name="title">Specifying 
the cache option in XML</parameter><rich-text-body><p>From <strong>Camel 
2.10</strong>: Camel supports specifying a value for 
the&#160;<strong><code>cache</code></strong> option both inside the Spring as 
well as the Blueprint XML.</p></rich-text-body><h3 
id="Properties-UsingaPropertiesfromthe">Using a Properties from the <a 
shape="rect" href="registry.html">Registry</a></h3><p><strong>Available as of 
Camel 2.4</strong><br clear="none"> For example in OSGi you may want to expose 
a service which returns the properties as a 
<strong><code>java.util.Properties</code></strong> object.</p><p>Then you could 
setup the <a shape="rect" href="properties.html">Properties</a> component as 
follows:</p><parameter 
ac:name="">xml</parameter><plain-text-body>&lt;propertyPlaceholder 
id="properties" location="ref:myProperties"/&gt;
+</plain-text-body><p>Where <strong><code>myProperties</code></strong> is the 
id to use for lookup in the OSGi registry. Notice we use the 
<strong><code>ref:</code></strong> prefix to tell Camel that it should lookup 
the properties for the <a shape="rect" 
href="registry.html">Registry</a>.</p><h3 
id="Properties-ExamplesUsingPropertiesComponent">Examples Using Properties 
Component</h3><p>When using property placeholders in the endpoint URIs you can 
either use the <strong><code>properties:</code></strong> component or define 
the placeholders directly in the URI. We will show example of both cases, 
starting with the former.</p><parameter 
ac:name="language">java</parameter><plain-text-body>// properties
 cool.end=mock:result
 
 // route
-from(&quot;direct:start&quot;)
-  .to(&quot;properties:{{cool.end}}&quot;);
-]]></script>
-</div></div><p>You can also use placeholders as a part of the endpoint 
URI:</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[// properties
+from("direct:start")
+  .to("properties:{{cool.end}}");
+</plain-text-body><p>You can also use placeholders as a part of the endpoint 
URI:</p><parameter ac:name="language">java</parameter><plain-text-body>// 
properties
 cool.foo=result
 
 // route
-from(&quot;direct:start&quot;)
-  .to(&quot;properties:mock:{{cool.foo}}&quot;);
-]]></script>
-</div></div><p>In the example above the to endpoint will be resolved to 
<strong><code>mock:result</code></strong>.</p><p>You can also have properties 
with refer to each other such as:</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[// properties
+from("direct:start")
+  .to("properties:mock:{{cool.foo}}");
+</plain-text-body><p>In the example above the to endpoint will be resolved to 
<strong><code>mock:result</code></strong>.</p><p>You can also have properties 
with refer to each other such as:</p><parameter 
ac:name="language">java</parameter><plain-text-body>// properties
 cool.foo=result
 cool.concat=mock:{{cool.foo}}
 
 // route
-from(&quot;direct:start&quot;)
-  .to(&quot;properties:mock:{{cool.concat}}&quot;);
-]]></script>
-</div></div><p>Notice how <strong><code>cool.concat</code></strong> refer to 
another property.</p><p>The <strong><code>properties:</code></strong> component 
also offers you to override and provide a location in the given URI using the 
<strong><code>locations</code></strong> option:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[from(&quot;direct:start&quot;)
-  .to(&quot;properties:bar.end?locations=com/mycompany/bar.properties&quot;);
-]]></script>
-</div></div><h3 id="Properties-Examples">Examples</h3><p>You can also use 
property placeholders directly in the endpoint URIs without having to use 
<strong><code>properties:</code></strong>.</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[// properties
+from("direct:start")
+  .to("properties:mock:{{cool.concat}}");
+</plain-text-body><p>Notice how <strong><code>cool.concat</code></strong> 
refer to another property.</p><p>The <strong><code>properties:</code></strong> 
component also offers you to override and provide a location in the given URI 
using the <strong><code>locations</code></strong> option:</p><parameter 
ac:name="language">java</parameter><plain-text-body>from("direct:start")
+  .to("properties:bar.end?locations=com/mycompany/bar.properties");
+</plain-text-body><h3 id="Properties-Examples">Examples</h3><p>You can also 
use property placeholders directly in the endpoint URIs without having to use 
<strong><code>properties:</code></strong>.</p><parameter 
ac:name="language">java</parameter><plain-text-body>// properties
 cool.foo=result
 
 // route
-from(&quot;direct:start&quot;)
-  .to(&quot;mock:{{cool.foo}}&quot;);
-]]></script>
-</div></div><p>And you can use them in multiple wherever you want 
them:</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[// properties
+from("direct:start")
+  .to("mock:{{cool.foo}}");
+</plain-text-body><p>And you can use them in multiple wherever you want 
them:</p><parameter ac:name="language">java</parameter><plain-text-body>// 
properties
 cool.start=direct:start
 cool.showid=true
 cool.result=result
 
 // route
-from(&quot;{{cool.start}}&quot;)
-    
.to(&quot;log:{{cool.start}}?showBodyType=false&amp;showExchangeId={{cool.showid}}&quot;)
-    .to(&quot;mock:{{cool.result}}&quot;);
-]]></script>
-</div></div><p>You can also your property placeholders when using <a 
shape="rect" href="producertemplate.html">ProducerTemplate</a> for 
example:</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[template.sendBody(&quot;{{cool.start}}&quot;, 
&quot;Hello World&quot;);
-]]></script>
-</div></div><h3 id="Properties-Examplewithlanguage">Example with <a 
shape="rect" href="simple.html">Simple</a> language</h3><p>The <a shape="rect" 
href="simple.html">Simple</a> language now also support using property 
placeholders, for example in the route below:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[// properties
+from("{{cool.start}}")
+    
.to("log:{{cool.start}}?showBodyType=false&amp;showExchangeId={{cool.showid}}")
+    .to("mock:{{cool.result}}");
+</plain-text-body><p>You can also your property placeholders when using <a 
shape="rect" href="producertemplate.html">ProducerTemplate</a> for 
example:</p><parameter 
ac:name="language">java</parameter><plain-text-body>template.sendBody("{{cool.start}}",
 "Hello World");
+</plain-text-body><h3 id="Properties-Examplewithlanguage">Example with <a 
shape="rect" href="simple.html">Simple</a> language</h3><p>The <a shape="rect" 
href="simple.html">Simple</a> language now also support using property 
placeholders, for example in the route below:</p><parameter 
ac:name="language">java</parameter><plain-text-body>// properties
 cheese.quote=Camel rocks
 
 // route
-from(&quot;direct:start&quot;)
-    .transform().simple(&quot;Hi ${body} do you think 
${properties:cheese.quote}?&quot;);
-]]></script>
-</div></div><p>You can also specify the location in the <a shape="rect" 
href="simple.html">Simple</a> language for example:</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[// bar.properties
+from("direct:start")
+    .transform().simple("Hi ${body} do you think ${properties:cheese.quote}?");
+</plain-text-body><p>You can also specify the location in the <a shape="rect" 
href="simple.html">Simple</a> language for example:</p><parameter 
ac:name="language">java</parameter><plain-text-body>// bar.properties
 bar.quote=Beer tastes good
 
 // route
-from(&quot;direct:start&quot;)
-    .transform().simple(&quot;Hi ${body}. 
${properties:com/mycompany/bar.properties:bar.quote}.&quot;);
-]]></script>
-</div></div><h3 
id="Properties-AdditionalPropertyPlaceholderSupportinSpringXML">Additional 
Property Placeholder Support in Spring XML</h3><p>The property placeholders is 
also supported in many of the Camel Spring XML tags such as 
<code><strong>&lt;package&gt;</strong>, <strong>&lt;packageScan&gt;</strong>, 
<strong>&lt;contextScan&gt;</strong>, <strong>&lt;jmxAgent&gt;</strong>, 
<strong>&lt;endpoint&gt;</strong>, <strong>&lt;routeBuilder&gt;</strong>, 
<strong>&lt;proxy&gt;</strong></code> and the others.</p><p>Example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>Using property 
placeholders in the &lt;jmxAgent&gt; tag</b></div><div class="codeContent 
panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;camelContext 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
-    &lt;propertyPlaceholder id=&quot;properties&quot; 
location=&quot;org/apache/camel/spring/jmx.properties&quot;/&gt;
+from("direct:start")
+    .transform().simple("Hi ${body}. 
${properties:com/mycompany/bar.properties:bar.quote}.");
+</plain-text-body><h3 
id="Properties-AdditionalPropertyPlaceholderSupportinSpringXML">Additional 
Property Placeholder Support in Spring XML</h3><p>The property placeholders is 
also supported in many of the Camel Spring XML tags such as 
<code><strong>&lt;package&gt;</strong>, <strong>&lt;packageScan&gt;</strong>, 
<strong>&lt;contextScan&gt;</strong>, <strong>&lt;jmxAgent&gt;</strong>, 
<strong>&lt;endpoint&gt;</strong>, <strong>&lt;routeBuilder&gt;</strong>, 
<strong>&lt;proxy&gt;</strong></code> and the 
others.</p><p>Example:</p><parameter 
ac:name="language">xml</parameter><parameter ac:name="title">Using property 
placeholders in the &lt;jmxAgent&gt; 
tag</parameter><plain-text-body>&lt;camelContext 
xmlns="http://camel.apache.org/schema/spring"&gt;
+    &lt;propertyPlaceholder id="properties" 
location="org/apache/camel/spring/jmx.properties"/&gt;
 
     &lt;!-- we can use propery placeholders when we define the JMX agent --&gt;
-    &lt;jmxAgent id=&quot;agent&quot; registryPort=&quot;{{myjmx.port}}&quot; 
disabled=&quot;{{myjmx.disabled}}&quot;
-              usePlatformMBeanServer=&quot;{{myjmx.usePlatform}}&quot;
-              createConnector=&quot;true&quot;
-              statisticsLevel=&quot;RoutesOnly&quot;
-              useHostIPAddress=&quot;true&quot;/&gt;
-
-    &lt;route id=&quot;foo&quot; autoStartup=&quot;false&quot;&gt;
-        &lt;from uri=&quot;seda:start&quot;/&gt;
-        &lt;to uri=&quot;mock:result&quot;/&gt;
+    &lt;jmxAgent id="agent" registryPort="{{myjmx.port}}" 
disabled="{{myjmx.disabled}}"
+              usePlatformMBeanServer="{{myjmx.usePlatform}}"
+              createConnector="true"
+              statisticsLevel="RoutesOnly"
+              useHostIPAddress="true"/&gt;
+
+    &lt;route id="foo" autoStartup="false"&gt;
+        &lt;from uri="seda:start"/&gt;
+        &lt;to uri="mock:result"/&gt;
     &lt;/route&gt;
-&lt;/camelContext&gt;]]></script>
-</div></div><p>Example:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Using property placeholders in the attributes of 
&lt;camelContext&gt;</b></div><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;camelContext 
trace=&quot;{{foo.trace}}&quot; 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
-    &lt;propertyPlaceholder id=&quot;properties&quot; 
location=&quot;org/apache/camel/spring/processor/myprop.properties&quot;/&gt;
+&lt;/camelContext&gt;</plain-text-body><p>Example:</p><parameter 
ac:name="language">xml</parameter><parameter ac:name="title">Using property 
placeholders in the attributes of 
&lt;camelContext&gt;</parameter><plain-text-body>&lt;camelContext 
trace="{{foo.trace}}" xmlns="http://camel.apache.org/schema/spring"&gt;
+    &lt;propertyPlaceholder id="properties" 
location="org/apache/camel/spring/processor/myprop.properties"/&gt;
 
-    &lt;template id=&quot;camelTemplate&quot; 
defaultEndpoint=&quot;{{foo.cool}}&quot;/&gt;
+    &lt;template id="camelTemplate" defaultEndpoint="{{foo.cool}}"/&gt;
 
     &lt;route&gt;
-        &lt;from uri=&quot;direct:start&quot;/&gt;
-        &lt;setHeader headerName=&quot;{{foo.header}}&quot;&gt;
+        &lt;from uri="direct:start"/&gt;
+        &lt;setHeader headerName="{{foo.header}}"&gt;
             &lt;simple&gt;${in.body} World!&lt;/simple&gt;
         &lt;/setHeader&gt;
-        &lt;to uri=&quot;mock:result&quot;/&gt;
+        &lt;to uri="mock:result"/&gt;
     &lt;/route&gt;
-&lt;/camelContext&gt;]]></script>
-</div></div><h3 
id="Properties-OverridingaPropertySettingUsingaJVMSystemProperty">Overriding a 
Property Setting Using a JVM System Property</h3><p><strong>Available as of 
Camel 2.5</strong><br clear="none"> It is possible to override a property value 
at runtime using a JVM System property without the need to restart the 
application to pick up the change. This may also be accomplished from the 
command line by creating a JVM System property of the same name as the property 
it replaces with a new value.</p><p>Example:</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[PropertiesComponent pc = 
context.getComponent(&quot;properties&quot;, PropertiesComponent.class);
+&lt;/camelContext&gt;</plain-text-body><h3 
id="Properties-OverridingaPropertySettingUsingaJVMSystemProperty">Overriding a 
Property Setting Using a JVM System Property</h3><p><strong>Available as of 
Camel 2.5</strong><br clear="none"> It is possible to override a property value 
at runtime using a JVM System property without the need to restart the 
application to pick up the change. This may also be accomplished from the 
command line by creating a JVM System property of the same name as the property 
it replaces with a new value.</p><p>Example:</p><parameter 
ac:name="language">java</parameter><plain-text-body>PropertiesComponent pc = 
context.getComponent("properties", PropertiesComponent.class);
 pc.setCache(false);
         
-System.setProperty(&quot;cool.end&quot;, &quot;mock:override&quot;);
-System.setProperty(&quot;cool.result&quot;, &quot;override&quot;);
+System.setProperty("cool.end", "mock:override");
+System.setProperty("cool.result", "override");
 
 context.addRoutes(new RouteBuilder() {
     @Override
     public void configure() throws Exception {
-        from(&quot;direct:start&quot;).to(&quot;properties:cool.end&quot;);
-        
from(&quot;direct:foo&quot;).to(&quot;properties:mock:{{cool.result}}&quot;);
+        from("direct:start").to("properties:cool.end");
+        from("direct:foo").to("properties:mock:{{cool.result}}");
     }
 });
 context.start();
 
-getMockEndpoint(&quot;mock:override&quot;).expectedMessageCount(2);
+getMockEndpoint("mock:override").expectedMessageCount(2);
 
-template.sendBody(&quot;direct:start&quot;, &quot;Hello World&quot;);
-template.sendBody(&quot;direct:foo&quot;, &quot;Hello Foo&quot;);
+template.sendBody("direct:start", "Hello World");
+template.sendBody("direct:foo", "Hello Foo");
 
-System.clearProperty(&quot;cool.end&quot;);
-System.clearProperty(&quot;cool.result&quot;);
+System.clearProperty("cool.end");
+System.clearProperty("cool.result");
         
 assertMockEndpointsSatisfied();
-]]></script>
-</div></div><h3 
id="Properties-UsingPropertyPlaceholdersforAnyKindofAttributeintheXMLDSL">Using 
Property Placeholders for Any Kind of Attribute in the XML 
DSL</h3><p><strong>Available as of Camel 2.7</strong></p><div 
class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>If you use OSGi Blueprint then 
this only works from <strong>2.11.1</strong> or <strong>2.10.5</strong> 
on.</p></div></div><p>Previously it was only the 
<strong><code>xs:string</code></strong> type attributes in the XML DSL that 
support placeholders. For example often a timeout attribute would be a 
<strong><code>xs:int</code></strong> type and thus you cannot set a string 
value as the placeholder key. This is now possible from Camel 2.7 on using a 
special placeholder namespace.</p><p>In the example below we use the 
<strong><code>prop</code></strong> 
 prefix for the namespace <code><a shape="rect" class="external-link" 
href="http://camel.apache.org/schema/placeholder";>http://camel.apache.org/schema/placeholder</a></code>
 by which we can use the <strong><code>prop</code></strong> prefix in the 
attributes in the XML DSLs. Notice how we use that in the <a shape="rect" 
href="multicast.html">Multicast</a> to indicate that the option 
<strong><code>stopOnException</code></strong> should be the value of the 
placeholder with the key <strong><code>stop</code></strong>.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;beans 
xmlns=&quot;http://www.springframework.org/schema/beans&quot;
-       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
-       xmlns:prop=&quot;http://camel.apache.org/schema/placeholder&quot;
-       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
-                           http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd&quot;&gt;
+</plain-text-body><h3 
id="Properties-UsingPropertyPlaceholdersforAnyKindofAttributeintheXMLDSL">Using 
Property Placeholders for Any Kind of Attribute in the XML 
DSL</h3><p><strong>Available as of Camel 2.7</strong></p><rich-text-body><p>If 
you use OSGi Blueprint then this only works from <strong>2.11.1</strong> or 
<strong>2.10.5</strong> on.</p></rich-text-body><p>Previously it was only the 
<strong><code>xs:string</code></strong> type attributes in the XML DSL that 
support placeholders. For example often a timeout attribute would be a 
<strong><code>xs:int</code></strong> type and thus you cannot set a string 
value as the placeholder key. This is now possible from Camel 2.7 on using a 
special placeholder namespace.</p><p>In the example below we use the 
<strong><code>prop</code></strong> prefix for the namespace <code><a 
shape="rect" class="external-link" 
href="http://camel.apache.org/schema/placeholder";>http://camel.apache.org/schema/placeholder</a></code>
 by which we can use the <st
 rong><code>prop</code></strong> prefix in the attributes in the XML DSLs. 
Notice how we use that in the <a shape="rect" 
href="multicast.html">Multicast</a> to indicate that the option 
<strong><code>stopOnException</code></strong> should be the value of the 
placeholder with the key <strong><code>stop</code></strong>.</p><parameter 
ac:name="language">xml</parameter><plain-text-body>&lt;beans 
xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns:prop="http://camel.apache.org/schema/placeholder";
+       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd
+                           http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd"&gt;
 
     &lt;!-- Notice in the declaration above, we have defined the prop prefix 
as the Camel placeholder namespace --&gt;
 
-    &lt;bean id=&quot;damn&quot; 
class=&quot;java.lang.IllegalArgumentException&quot;&gt;
-        &lt;constructor-arg index=&quot;0&quot; value=&quot;Damn&quot;/&gt;
+    &lt;bean id="damn" class="java.lang.IllegalArgumentException"&gt;
+        &lt;constructor-arg index="0" value="Damn"/&gt;
     &lt;/bean&gt;
 
-    &lt;camelContext 
xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
-        &lt;propertyPlaceholder id=&quot;properties&quot;
-                             
location=&quot;classpath:org/apache/camel/component/properties/myprop.properties&quot;
-                             
xmlns=&quot;http://camel.apache.org/schema/spring&quot;/&gt;
+    &lt;camelContext xmlns="http://camel.apache.org/schema/spring"&gt;
+        &lt;propertyPlaceholder id="properties"
+                             
location="classpath:org/apache/camel/component/properties/myprop.properties"
+                             xmlns="http://camel.apache.org/schema/spring"/&gt;
 
         &lt;route&gt;
-            &lt;from uri=&quot;direct:start&quot;/&gt;
+            &lt;from uri="direct:start"/&gt;
             &lt;!-- use prop namespace, to define a property placeholder, 
which maps to
                  option stopOnException={{stop}} --&gt;
-            &lt;multicast prop:stopOnException=&quot;stop&quot;&gt;
-                &lt;to uri=&quot;mock:a&quot;/&gt;
-                &lt;throwException ref=&quot;damn&quot;/&gt;
-                &lt;to uri=&quot;mock:b&quot;/&gt;
+            &lt;multicast prop:stopOnException="stop"&gt;
+                &lt;to uri="mock:a"/&gt;
+                &lt;throwException ref="damn"/&gt;
+                &lt;to uri="mock:b"/&gt;
             &lt;/multicast&gt;
         &lt;/route&gt;
     &lt;/camelContext&gt;
-&lt;/beans&gt;]]></script>
-</div></div><p>In our properties file we have the value defined as</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[stop=true
-]]></script>
-</div></div><h3 id="Properties-UsingPropertyPlaceholderintheJavaDSL">Using 
Property Placeholder in the Java DSL</h3><p><strong>Available as of Camel 
2.7</strong></p><p>Likewise we have added support for defining placeholders in 
the Java DSL using the new <strong><code>placeholder</code></strong> DSL as 
shown in the following equivalent example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[from(&quot;direct:start&quot;)
+&lt;/beans&gt;</plain-text-body><p>In our properties file we have the value 
defined as</p><plain-text-body>stop=true
+</plain-text-body><h3 
id="Properties-UsingPropertyPlaceholderintheJavaDSL">Using Property Placeholder 
in the Java DSL</h3><p><strong>Available as of Camel 
2.7</strong></p><p>Likewise we have added support for defining placeholders in 
the Java DSL using the new <strong><code>placeholder</code></strong> DSL as 
shown in the following equivalent example:</p><parameter 
ac:name="language">java</parameter><plain-text-body>from("direct:start")
   // use a property placeholder for the option stopOnException on the 
Multicast EIP
   // which should have the value of {{stop}} key being looked up in the 
properties file
   .multicast()
-  .placeholder(&quot;stopOnException&quot;, &quot;stop&quot;)
-  .to(&quot;mock:a&quot;)
-  .throwException(new IllegalAccessException(&quot;Damn&quot;))
-  .to(&quot;mock:b&quot;);]]></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="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;blueprint 
xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot;
-           xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
-           
xmlns:cm=&quot;http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0&quot;
-           xsi:schemaLocation=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0 
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd&quot;&gt;
+  .placeholder("stopOnException", "stop")
+  .to("mock:a")
+  .throwException(new IllegalAccessException("Damn"))
+  .to("mock:b");</plain-text-body><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><parameter 
ac:name="language">xml</parameter><plain-text-body>&lt;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"&gt;
 
     &lt;!-- OSGI blueprint property placeholder --&gt;
-    &lt;cm:property-placeholder id=&quot;myblueprint.placeholder&quot; 
persistent-id=&quot;camel.blueprint&quot;&gt;
+    &lt;cm:property-placeholder id="myblueprint.placeholder" 
persistent-id="camel.blueprint"&gt;
         &lt;!-- list some properties as needed --&gt;
         &lt;cm:default-properties&gt;
-            &lt;cm:property name=&quot;result&quot; 
value=&quot;mock:result&quot;/&gt;
+            &lt;cm:property name="result" value="mock:result"/&gt;
         &lt;/cm:default-properties&gt;
     &lt;/cm:property-placeholder&gt;
 
-    &lt;camelContext 
xmlns=&quot;http://camel.apache.org/schema/blueprint&quot;&gt;
+    &lt;camelContext xmlns="http://camel.apache.org/schema/blueprint"&gt;
         &lt;!-- 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 --&gt;
         &lt;route&gt;
-            &lt;from uri=&quot;direct:start&quot;/&gt;
-            &lt;to uri=&quot;mock:foo&quot;/&gt;
-            &lt;to uri=&quot;{{result}}&quot;/&gt;
+            &lt;from uri="direct:start"/&gt;
+            &lt;to uri="mock:foo"/&gt;
+            &lt;to uri="{{result}}"/&gt;
         &lt;/route&gt;
     &lt;/camelContext&gt;
-&lt;/blueprint&gt;]]></script>
-</div></div><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><strong><code style="line-height: 
1.42857;">useBlueprintPropertyResolver</code></strong><span style="line-height: 
1.42857;"> to false on the </span><strong><code style="line-height: 
1.42857;">&lt;camelContext&gt;</code></strong><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&#160;<code><strong>{{</strong> 
<strong>}}</strong></code> in the Camel route, which will lookup the value from 
OSGi blueprint.<br clear="none"> The blueprint syntax for placeholders is 
<strong><
 code>${}</code></strong>. So outside 
the&#160;<strong><code>&lt;camelContext&gt;</code></strong> you must use 
the&#160;<strong><code>${}</code></strong> syntax. Where as 
inside&#160;<strong><code>&lt;camelContext&gt;</code></strong> you must 
use&#160;<code><strong>{{</strong> <strong>}}</strong></code> syntax. 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&#160;<strong><code>&lt;propertyPlaceholder&gt;</code></strong> 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[&lt;blueprint 
xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot;
-           xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
-           
xmlns:cm=&quot;http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0&quot;
-           xsi:schemaLocation=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0 
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd&quot;&gt;
+&lt;/blueprint&gt;</plain-text-body><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><strong><code 
style="line-height: 1.42857;">useBlueprintPropertyResolver</code></strong><span 
style="line-height: 1.42857;"> to false on the </span><strong><code 
style="line-height: 1.42857;">&lt;camelContext&gt;</code></strong><span 
style="line-height: 1.42857;"> definition.</span></p><parameter 
ac:name="title">About placeholder syntaxes</parameter><rich-text-body><p>Notice 
how we can use the Camel syntax for placeholders&#160;<code><strong>{{</strong> 
<strong>}}</strong></code> in the Camel route, which will lookup the value from 
OSGi blueprint.<br clear="none"> The blueprint syntax for placeholders is 
<strong><code>${}</code></strong>. So outside 
the&#160;<strong><code>&lt;camelContext&gt;</code></strong> you must use 
the&#160;<strong><code>${}</code></strong> syntax. Where as
  inside&#160;<strong><code>&lt;camelContext&gt;</code></strong> you must 
use&#160;<code><strong>{{</strong> <strong>}}</strong></code> syntax. OSGi 
blueprint allows you to configure the syntax, so you can actually align those 
if you want.</p></rich-text-body><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&#160;<strong><code>&lt;propertyPlaceholder&gt;</code></strong> as shown 
in the example below:</p><parameter 
ac:name="language">xml</parameter><plain-text-body>&lt;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"&gt;
 
     &lt;!-- OSGI blueprint property placeholder --&gt;
-    &lt;cm:property-placeholder id=&quot;myblueprint.placeholder&quot; 
persistent-id=&quot;camel.blueprint&quot;&gt;
+    &lt;cm:property-placeholder id="myblueprint.placeholder" 
persistent-id="camel.blueprint"&gt;
         &lt;!-- list some properties as needed --&gt;
         &lt;cm:default-properties&gt;
-            &lt;cm:property name=&quot;prefix.result&quot; 
value=&quot;mock:result&quot;/&gt;
+            &lt;cm:property name="prefix.result" value="mock:result"/&gt;
         &lt;/cm:default-properties&gt;
     &lt;/cm:property-placeholder&gt;
 
-    &lt;camelContext 
xmlns=&quot;http://camel.apache.org/schema/blueprint&quot;&gt;
+    &lt;camelContext xmlns="http://camel.apache.org/schema/blueprint"&gt;
         &lt;!-- using Camel properties component and refer to the blueprint 
property placeholder by its id --&gt;
-        &lt;propertyPlaceholder id=&quot;properties&quot; 
location=&quot;blueprint:myblueprint.placeholder&quot;
-                             prefixToken=&quot;[[&quot; 
suffixToken=&quot;]]&quot;
-                             propertyPrefix=&quot;prefix.&quot;/&gt;
+        &lt;propertyPlaceholder id="properties" 
location="blueprint:myblueprint.placeholder"
+                             prefixToken="[[" suffixToken="]]"
+                             propertyPrefix="prefix."/&gt;
 
         &lt;!-- in the route we can use {{ }} placeholders which will lookup 
in blueprint --&gt;
         &lt;route&gt;
-            &lt;from uri=&quot;direct:start&quot;/&gt;
-            &lt;to uri=&quot;mock:foo&quot;/&gt;
-            &lt;to uri=&quot;[[result]]&quot;/&gt;
+            &lt;from uri="direct:start"/&gt;
+            &lt;to uri="mock:foo"/&gt;
+            &lt;to uri="[[result]]"/&gt;
         &lt;/route&gt;
     &lt;/camelContext&gt;
-&lt;/blueprint&gt;]]></script>
-</div></div><p>Notice how we use the <strong><code>blueprint</code></strong> 
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=&quot;blueprint:myblueprint.placeholder,classpath:myproperties.properties&quot;
-]]></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">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
-&lt;!-- blueprint property placeholders --&gt;
-&lt;cm:property-placeholder persistent-id=&quot;my-placeholders&quot; 
update-strategy=&quot;reload&quot;&gt;
-  &lt;cm:default-properties&gt;
-    &lt;cm:property name=&quot;greeting&quot; value=&quot;Hello&quot;/&gt;
-    &lt;cm:property name=&quot;destination&quot; 
value=&quot;mock:result&quot;/&gt;
-  &lt;/cm:default-properties&gt;
-&lt;/cm:property-placeholder&gt;
-
-&lt;!-- a bean that uses a blueprint property placeholder --&gt;
-&lt;bean id=&quot;myCoolBean&quot; 
class=&quot;org.apache.camel.test.blueprint.MyCoolBean&quot;&gt;
-  &lt;property name=&quot;say&quot; value=&quot;${greeting}&quot;/&gt;
-&lt;/bean&gt;
-
-&lt;camelContext xmlns=&quot;http://camel.apache.org/schema/blueprint&quot;&gt;
-
-  &lt;route&gt;
-    &lt;from uri=&quot;direct:start&quot;/&gt;
-    &lt;bean ref=&quot;myCoolBean&quot; method=&quot;saySomething&quot;/&gt;
-    &lt;to uri=&quot;{{destination}}&quot;/&gt;
-  &lt;/route&gt;
-
-&lt;/camelContext&gt;
-]]></script>
-</div></div>Notice that we have 
a&#160;<strong><code>&lt;bean&gt;</code></strong> which refers to one of the 
properties. And in the Camel route we refer to the other using 
the&#160;<strong><code>{{ }}</code></strong> notation.<p>Now if you want to 
override these Blueprint properties from an unit test, you can do this as shown 
below:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
-<script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
-@Override
-protected String useOverridePropertiesWithConfigAdmin(Dictionary props) {
-    // add the properties we want to override
-    props.put(&quot;greeting&quot;, &quot;Bye&quot;);
-
-    // return the PID of the config-admin we are using in the blueprint xml 
file
-    return &quot;my-placeholders&quot;;
-}
-]]></script>
-</div></div>To do this we override and implement the 
<strong><code>useOverridePropertiesWithConfigAdmin</code></strong> method. We 
can then put the properties we want to override on the given props parameter. 
And the return value <em>must</em> be the persistence-id of 
the&#160;<strong><code>&lt;cm:property-placeholder&gt;</code></strong> tag, 
which you define in the blueprint XML file.<h4 
id="Properties-Usinga.cfgor.propertiesFileForBlueprintPropertyPlaceholders">Using
 a <code>.cfg</code> or&#160;<code>.properties</code> File For Blueprint 
Property Placeholders</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 in a .properties 
or&#160;<strong><code>.cfg</code></strong> file. If you use Apache 
ServiceMix/Karaf then this container has a convention that it loads the 
properties from a file in the etc directory with the naming 
<strong><code>etc/pid.cfg</code></strong>, where&#160;
 <strong><code>pid</code></strong> is the persistence-id.</p><p>For example in 
the blueprint XML file we have the 
<strong><code>persistence-id="stuff"</code></strong>, which mean it will load 
the configuration file as <strong><code>etc/stuff.cfg</code></strong>.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
-&lt;!-- blueprint property placeholders, that will use etc/stuff.cfg as the 
properties file --&gt;
-&lt;cm:property-placeholder persistent-id=&quot;stuff&quot; 
update-strategy=&quot;reload&quot;/&gt;
-
-&lt;!-- a bean that uses a blueprint property placeholder --&gt;
-&lt;bean id=&quot;myCoolBean&quot; 
class=&quot;org.apache.camel.test.blueprint.MyCoolBean&quot;&gt;
-  &lt;property name=&quot;say&quot; value=&quot;${greeting}&quot;/&gt;
-&lt;/bean&gt;
-
-&lt;camelContext xmlns=&quot;http://camel.apache.org/schema/blueprint&quot;&gt;
-
-  &lt;route&gt;
-    &lt;from uri=&quot;direct:start&quot;/&gt;
-    &lt;bean ref=&quot;myCoolBean&quot; method=&quot;saySomething&quot;/&gt;
-    &lt;to uri=&quot;mock:result&quot;/&gt;
-  &lt;/route&gt;
-
-&lt;/camelContext&gt;
-]]></script>
-</div></div>Now if you want to unit test this blueprint XML file, then you can 
override the <strong><code>loadConfigAdminConfigurationFile</code></strong> and 
tell Camel which file to load as shown below:<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[
-@Override
-protected String[] loadConfigAdminConfigurationFile() {
-    // String[0] = tell Camel the path of the .cfg file to use for OSGi 
ConfigAdmin in the blueprint XML file
-    // String[1] = tell Camel the persistence-id of the 
cm:property-placeholder in the blueprint XML file
-    return new String[]{&quot;src/test/resources/etc/stuff.cfg&quot;, 
&quot;stuff&quot;};
-}
-]]></script>
-</div></div>Notice that this method requires to return 
a&#160;<strong><code>String[]</code></strong> with 2 values. The 1st value is 
the path for the configuration file to load. The second value is the 
persistence-id of 
the&#160;<strong><code>&lt;cm:property-placeholder&gt;</code></strong> 
tag.<p>The&#160;<strong><code>stuff.cfg</code></strong> file is just a plain 
properties file with the property placeholders such as:</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[## this is a comment
+&lt;/blueprint&gt;</plain-text-body><p>Notice how we use the 
<strong><code>blueprint</code></strong> 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><plain-text-body>location="blueprint:myblueprint.placeholder,classpath:myproperties.properties"
+</plain-text-body><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:<plain-text-body>{snippet:id=e1|lang=xml|url=camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-outside.xml}</plain-text-body>Notice
 that we have a&#160;<strong><code>&lt;bean&gt;</code></strong> which refers to 
one of the properties. And in the Camel route we refer to the other using 
the&#160;<strong><code>{{ }}</code></strong> notation.</p><p>Now if you want to 
override these Blueprint properties from an unit test, you can do this as shown 
below:<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/components/camel-test-bluepr
 
int/src/test/java/org/apache/camel/test/blueprint/ConfigAdminOverridePropertiesOutsideCamelContextTest.java}</plain-text-body>To
 do this we override and implement the 
<strong><code>useOverridePropertiesWithConfigAdmin</code></strong> method. We 
can then put the properties we want to override on the given props parameter. 
And the return value <em>must</em> be the persistence-id of 
the&#160;<strong><code>&lt;cm:property-placeholder&gt;</code></strong> tag, 
which you define in the blueprint XML file.</p><h4 
id="Properties-Usinga.cfgor.propertiesFileForBlueprintPropertyPlaceholders">Using
 a <code>.cfg</code> or&#160;<code>.properties</code> File For Blueprint 
Property Placeholders</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 in a .properties 
or&#160;<strong><code>.cfg</code></strong> file. If you use Apache 
ServiceMix/Karaf then this container has a convention that it loads 
 the properties from a file in the etc directory with the naming 
<strong><code>etc/pid.cfg</code></strong>, 
where&#160;<strong><code>pid</code></strong> is the persistence-id.</p><p>For 
example in the blueprint XML file we have the 
<strong><code>persistence-id="stuff"</code></strong>, which mean it will load 
the configuration file as 
<strong><code>etc/stuff.cfg</code></strong>.<plain-text-body>{snippet:id=e1|lang=xml|url=camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-loadfile.xml}</plain-text-body>Now
 if you want to unit test this blueprint XML file, then you can override the 
<strong><code>loadConfigAdminConfigurationFile</code></strong> and tell Camel 
which file to load as shown 
below:<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadConfigurationFileTest.java}</plain-text-body>Notice
 that this method requires to return a&#1
 60;<strong><code>String[]</code></strong> with 2 values. The 1st value is the 
path for the configuration file to load. The second value is the persistence-id 
of the&#160;<strong><code>&lt;cm:property-placeholder&gt;</code></strong> 
tag.</p><p>The&#160;<strong><code>stuff.cfg</code></strong> file is just a 
plain properties file with the property placeholders such 
as:</p><plain-text-body>## this is a comment
 greeting=Bye
-]]></script>
-</div></div><h4 
id="Properties-Usinga.cfgfileandOverridingPropertiesforBlueprintPropertyPlaceholders">Using
 a <code>.cfg</code> file and Overriding Properties for Blueprint Property 
Placeholders</h4><p>You can do both as well. Here is a complete example. First 
we have the Blueprint XML file:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
-&lt;blueprint xmlns=&quot;http://www.osgi.org/xmlns/blueprint/v1.0.0&quot;
-           xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
-           
xmlns:cm=&quot;http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0&quot;
-           xsi:schemaLocation=&quot;
-             http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 
http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd
-             http://www.osgi.org/xmlns/blueprint/v1.0.0 
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd&quot;&gt;
-
-  &lt;!-- blueprint property placeholders, that will use etc/stuff.cfg as the 
properties file --&gt;
-  &lt;cm:property-placeholder persistent-id=&quot;stuff&quot; 
update-strategy=&quot;reload&quot;&gt;
-    &lt;cm:default-properties&gt;
-      &lt;cm:property name=&quot;greeting&quot; value=&quot;Hello&quot; /&gt;
-      &lt;cm:property name=&quot;echo&quot; value=&quot;Hey&quot; /&gt;
-      &lt;cm:property name=&quot;destination&quot; 
value=&quot;mock:original&quot; /&gt;
-    &lt;/cm:default-properties&gt;
-  &lt;/cm:property-placeholder&gt;
-
-  &lt;!-- a bean that uses a blueprint property placeholder --&gt;
-  &lt;bean id=&quot;myCoolBean&quot; 
class=&quot;org.apache.camel.test.blueprint.MyCoolBean&quot;&gt;
-    &lt;property name=&quot;say&quot; value=&quot;${greeting}&quot;/&gt;
-    &lt;property name=&quot;echo&quot; value=&quot;${echo}&quot;/&gt;
-  &lt;/bean&gt;
-
-  &lt;camelContext 
xmlns=&quot;http://camel.apache.org/schema/blueprint&quot;&gt;
-
-    &lt;route&gt;
-      &lt;from uri=&quot;direct:start&quot;/&gt;
-      &lt;bean ref=&quot;myCoolBean&quot; method=&quot;saySomething&quot;/&gt;
-      &lt;to uri=&quot;{{destination}}&quot;/&gt;
-      &lt;bean ref=&quot;myCoolBean&quot; method=&quot;echoSomething&quot;/&gt;
-      &lt;to uri=&quot;{{destination}}&quot;/&gt;
-    &lt;/route&gt;
-
-  &lt;/camelContext&gt;
-
-&lt;/blueprint&gt;
-]]></script>
-</div></div>And in the unit test class we do as follows:<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[
-/**
- * This example will load a Blueprint .cfg file (which will initialize 
configadmin), and also override its property
- * placeholders from this unit test source code directly (the change will 
reload blueprint container).
- */
-public class ConfigAdminLoadConfigurationFileAndOverrideTest extends 
CamelBlueprintTestSupport {
-
-    @Override
-    protected String getBlueprintDescriptor() {
-        // which blueprint XML file to use for this test
-        return 
&quot;org/apache/camel/test/blueprint/configadmin-loadfileoverride.xml&quot;;
-    }
-
-    @Override
-    protected String[] loadConfigAdminConfigurationFile() {
-        // which .cfg file to use, and the name of the persistence-id
-        return new String[]{&quot;src/test/resources/etc/stuff.cfg&quot;, 
&quot;stuff&quot;};
-    }
-
-    @Override
-    protected String useOverridePropertiesWithConfigAdmin(Dictionary props) 
throws Exception {
-        // override / add extra properties
-        props.put(&quot;destination&quot;, &quot;mock:extra&quot;);
-
-        // return the persistence-id to use
-        return &quot;stuff&quot;;
-    }
-
-    @Test
-    public void testConfigAdmin() throws Exception {
-        // mock:original comes from 
&lt;cm:default-properties&gt;/&lt;cm:property name=&quot;destination&quot; 
value=&quot;mock:original&quot; /&gt;
-        getMockEndpoint(&quot;mock:original&quot;).setExpectedMessageCount(0);
-        // mock:result comes from loadConfigAdminConfigurationFile()
-        getMockEndpoint(&quot;mock:result&quot;).setExpectedMessageCount(0);
-        // mock:extra comes from useOverridePropertiesWithConfigAdmin()
-        
getMockEndpoint(&quot;mock:extra&quot;).expectedBodiesReceived(&quot;Bye 
World&quot;, &quot;Yay Bye WorldYay Bye World&quot;);
-
-        template.sendBody(&quot;direct:start&quot;, &quot;World&quot;);
-
-        assertMockEndpointsSatisfied();
-    }
-
-}
-]]></script>
-</div></div>And the <strong><code>etc/stuff.cfg</code></strong> configuration 
file contains:<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[greeting=Bye
+</plain-text-body><h4 
id="Properties-Usinga.cfgfileandOverridingPropertiesforBlueprintPropertyPlaceholders">Using
 a <code>.cfg</code> file and Overriding Properties for Blueprint Property 
Placeholders</h4><p>You can do both as well. Here is a complete example. First 
we have the Blueprint XML 
file:<plain-text-body>{snippet:id=e1|lang=xml|url=camel/trunk/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/configadmin-loadfileoverride.xml}</plain-text-body>And
 in the unit test class we do as 
follows:<plain-text-body>{snippet:id=e1|lang=java|url=camel/trunk/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/ConfigAdminLoadConfigurationFileAndOverrideTest.java}</plain-text-body>And
 the <strong><code>etc/stuff.cfg</code></strong> configuration file 
contains:</p><plain-text-body>greeting=Bye
 echo=Yay
 destination=mock:result
-]]></script>
-</div></div><h3 
id="Properties-BridgingSpringandCamelPropertyPlaceholders">Bridging Spring and 
Camel Property Placeholders</h3><p><strong>Available as of Camel 
2.10</strong></p><p>The Spring Framework does not allow third-party frameworks 
such as Apache Camel to seamless hook into the Spring property placeholder 
mechanism. However you can easily bridge Spring and Camel by declaring a Spring 
bean with the type 
<strong><code>org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer</code></strong>,
 which is a Spring 
<strong><code>org.springframework.beans.factory.config.PropertyPlaceholderConfigurer</code></strong>
 type.</p><p>To bridge Spring and Camel you must define a single bean as shown 
below:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>Bridging Spring and Camel property placeholders</b></div><div 
class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
-
-&lt;!-- bridge spring property placeholder with Camel --&gt;
-&lt;!-- you must NOT use the &lt;context:property-placeholder at the same 
time, only this bridge bean --&gt;
-&lt;bean id=&quot;bridgePropertyPlaceholder&quot; 
class=&quot;org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer&quot;&gt;
-  &lt;property name=&quot;location&quot; 
value=&quot;classpath:org/apache/camel/component/properties/cheese.properties&quot;/&gt;
-&lt;/bean&gt;
-
-]]></script>
-</div></div>You <strong>must not</strong> use the 
spring&#160;<strong><code>&lt;context:property-placeholder&gt;</code></strong> 
namespace at the same time; this is not possible.<p>After declaring this bean, 
you can define property placeholders using both the Spring style, and the Camel 
style within the&#160;<strong><code>&lt;camelContext&gt;</code></strong> tag 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 
bridge property placeholders</b></div><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[
-
-&lt;!-- a bean that uses Spring property placeholder --&gt;
-&lt;!-- the ${hi} is a spring property placeholder --&gt;
-&lt;bean id=&quot;hello&quot; 
class=&quot;org.apache.camel.component.properties.HelloBean&quot;&gt;
-  &lt;property name=&quot;greeting&quot; value=&quot;${hi}&quot;/&gt;
-&lt;/bean&gt;
-
-&lt;camelContext xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
-  &lt;!-- in this route we use Camels property placeholder {{ }} style --&gt;
-  &lt;route&gt;
-    &lt;from uri=&quot;direct:{{cool.bar}}&quot;/&gt;
-    &lt;bean ref=&quot;hello&quot;/&gt;
-    &lt;to uri=&quot;{{cool.end}}&quot;/&gt;
-  &lt;/route&gt;
-&lt;/camelContext&gt;
-
-]]></script>
-</div></div>Notice how the hello bean is using pure Spring property 
placeholders using the&#160;<strong><code>${}</code></strong> notation. And in 
the Camel routes we use the Camel placeholder notation with <strong><code>{{ 
}}</code></strong>.<h4 
id="Properties-ClashingSpringPropertyPlaceholderswithCamelsLanguage">Clashing 
Spring Property Placeholders with Camels <a shape="rect" 
href="simple.html">Simple</a> Language</h4><p>Take notice when using Spring 
bridging placeholder then the spring&#160;<strong><code>${}</code></strong> 
syntax clashes with the <a shape="rect" href="simple.html">Simple</a> in Camel, 
and therefore take care.</p><p>Example:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="brush: xml; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[&lt;setHeader 
headerName=&quot;Exchange.FILE_NAME&quot;&gt;

[... 146 lines stripped ...]

Reply via email to