Modified: websites/production/camel/content/properties.html
==============================================================================
--- websites/production/camel/content/properties.html (original)
+++ websites/production/camel/content/properties.html Thu Sep  8 17:19:22 2016
@@ -89,7 +89,7 @@
 <div class="wiki-content maincontent"><h2 
id="Properties-PropertiesComponent">Properties 
Component</h2><p><strong>Available as of Camel 2.3</strong></p><h3 
id="Properties-URIformat">URI format</h3><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <script class="brush: java; gutter: false; theme: Default" 
type="syntaxhighlighter"><![CDATA[properties:key[?options]
 ]]></script>
-</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>Name</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>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="confluen
 ceTd"><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> To use a specific 
charset to load the properties, such as UTF-8. By 
default&#160;<code>ISO-8859-1</code> (<code>latin1</code>) is 
used.</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 name specified.</p><p>If <strong><code>false</code></strong>, only th
 e augmented property name is searched.</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 cannot 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 list of locations to load properties. You 
can use comma to separate multiple locations. This option will override any 
default locations and <strong>only</strong> use the locations from this option
 .</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> The token to 
indicate the beginning of a property token.</p></td></tr><tr><td colspan="1" 
rowspan="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> 
Optional prefix prepended to property names before 
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> 
Optional suffix appended to property names before 
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> The token to indicate the 
end of a property token.</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 an
 d 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><p><strong>Note</strong>: 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;</p></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-ico
 n-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;<code>PropertyPlaceholder</code></h2><p><strong>Available
 as of Camel 2.3</strong></p><p>Camel now provides a new 
<strong><code>PropertiesComponent</code></strong> in 
<strong>camel-core</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 
have a limitation which prevents 3rd party frameworks to leverage Spring 
property placeholders to the fullest.</p><p>For more details see: <a 
shape="rect" href="how-do-i-use-spr
 ing-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 generally in use when 
doing:</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>@Prope
 rtyInject</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-Syntax">Syntax</h3><p>The syntax to use 
Camel's property placeholder is to use <strong>{{<code>key</code>}}</strong> 
for example <strong>{{<code>file.uri</code>}}</strong> where 
<strong><code>file.uri</code></strong> is the property key. You can use 
property placeholders in parts of the endpoint URI's which for example you can 
use placeholders for parameters in the URIs.</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:/so
 me/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 which allows 3rd part to provide their own 
resolver to lookup properties. 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>.
  You can prefix the locations with either:</p><ul 
class="alternate"><li><strong><code>ref:</code> Camel 2.4:</strong> to lookup 
in the <a shape="rect" 
href="registry.html">Registry.</a></li><li><strong><code>file:</code></strong> 
to load the from file system.</li><li><strong><code>classpath:</code></strong> 
to load from classpath (this is also the default if no prefix is 
provided).</li><li><strong><code>blueprint:</code> Camel 2.7:</strong> to use a 
specific OSGi blueprint placeholder service.</li></ul><h3 
id="Properties-DefiningLocation">Defining Location</h3><p>The 
<strong><code>PropertiesResolver</code></strong> need to know a location(s) 
where to resolve the properties. You can define 1 to many locations. If you 
define the location in a single String property you can separate multiple 
locations with comma such as:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</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>Name</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><code>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="confluen
 ceTd"><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> To use a specific 
charset to load the properties, such as UTF-8. By 
default&#160;<code>ISO-8859-1</code> (<code>latin1</code>) is 
used.</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 name specified.</p><p>If <strong><code>false</code></strong>, only th
 e augmented property name is searched.</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 cannot 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 list of locations to load properties. You 
can use comma to separate multiple locations. This option will override any 
default locations and <strong>only</strong> use the locations from this option
 .</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> The token to 
indicate the beginning of a property token.</p></td></tr><tr><td colspan="1" 
rowspan="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> 
Optional prefix prepended to property names before 
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> 
Optional suffix appended to property names before 
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> The token to indicate the 
end of a property token.</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 an
 d 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><p><strong>Note</strong>: 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;</p></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-ico
 n-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;<code>PropertyPlaceholder</code></h2><p><strong>Available
 as of Camel 2.3</strong></p><p>Camel now provides a new 
<strong><code>PropertiesComponent</code></strong> in 
<strong>camel-core</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 3rd party frameworks from fully leveraging 
Spring property placeholders.</p><p>For more details see: <a shape="rect" 
href="how-do-i-use-spring-pro
 perty-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 generally in use when 
doing 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 
<stron
 g><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-Syntax">Syntax</h3><p>The syntax to use 
Camel's property placeholder is to use <strong>{{<code>key</code>}}</strong> 
for example <strong>{{<code>file.uri</code>}}</strong> where 
<strong><code>file.uri</code></strong> is the property key. You can use 
property placeholders in parts of the endpoint URI's which for example you can 
use placeholders for parameters in the URIs.</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><cod
 e>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 which allows 3rd part to provide their own 
resolver to lookup properties. 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>. You can prefix the locations with either:</p><ul 
class="alternate"><li><strong><code>ref:</code> Camel 2.4:</strong> to lookup 
in the <a shape="rect" 
href="registry.html">Registry.</a></li><li><strong><code>file:</code></strong> 
to load the from file system.</li><li><strong><code>classpath:</code></strong> 
to load from classpath (this is also the default if no prefix is 
provided).</li><li><strong><code>blueprint:</code> Camel 2.7:</strong> to use a 
specific OSGi blueprint placeholder service.</li></ul><h3 
id="Properties-DefiningLocation">Defining Location</h3><p>The 
<strong><code>PropertiesResolver</code></strong> need to know a location(s) 
where to resolve the properties. You can define 1 to many locations. If you 
define the location in a single String property you can separate multiple 
locations with comma 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[pc.setLocation(&quot;com/mycompany/myprop.properties,com/mycompany/other.properties&quot;);
 ]]></script>
 </div></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">
@@ -201,7 +201,7 @@ bar.quote=Beer tastes good
 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>The example below 
has property placeholder in 
the&#160;<strong><code>&lt;jmxAgent&gt;</code></strong> tag:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</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;
 
@@ -217,7 +217,7 @@ from(&quot;direct:start&quot;)
         &lt;to uri=&quot;mock:result&quot;/&gt;
     &lt;/route&gt;
 &lt;/camelContext&gt;]]></script>
-</div></div><p>You can also define property placeholders in the various 
attributes on the&#160;<strong><code>&lt;camelContext&gt;</code></strong> tag 
such as <strong><code>trace</code></strong> as shown here:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</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;
 
@@ -257,14 +257,12 @@ System.clearProperty(&quot;cool.result&q
         
 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 
<code>prop</code> prefix for the na
 mespace <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">
+</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;
+       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;
 
     &lt;!-- Notice in the declaration above, we have defined the prop prefix 
as the Camel placeholder namespace --&gt;
 
@@ -273,7 +271,6 @@ assertMockEndpointsSatisfied();
     &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;
@@ -306,8 +303,7 @@ assertMockEndpointsSatisfied();
 <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;
+           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;!-- OSGI blueprint property placeholder --&gt;
     &lt;cm:property-placeholder id=&quot;myblueprint.placeholder&quot; 
persistent-id=&quot;camel.blueprint&quot;&gt;
@@ -331,8 +327,7 @@ assertMockEndpointsSatisfied();
 <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;
+           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;!-- OSGI blueprint property placeholder --&gt;
     &lt;cm:property-placeholder id=&quot;myblueprint.placeholder&quot; 
persistent-id=&quot;camel.blueprint&quot;&gt;
@@ -384,7 +379,7 @@ assertMockEndpointsSatisfied();
 
 &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">
+</div></div>&#160;<p>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:</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) {
@@ -395,7 +390,7 @@ protected String useOverridePropertiesWi
     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 
ServieMix/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">
+</div></div>&#160;<p>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 
ServieMix/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;
@@ -415,7 +410,7 @@ protected String useOverridePropertiesWi
 
 &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">
+</div></div>&#160;<p>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:</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[] loadConfigAdminConfigurationFile() {
@@ -424,7 +419,7 @@ protected String[] loadConfigAdminConfig
     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 2nd 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">
+</div></div>&#160;<p>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 2nd 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><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
 greeting=Bye
 ]]></script>
@@ -466,7 +461,7 @@ greeting=Bye
 
 &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">
+</div></div>&#160;<p>And in the unit test class we do 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[
 /**
  * This example will load a Blueprint .cfg file (which will initialize 
configadmin), and also override its property
@@ -511,7 +506,7 @@ public class ConfigAdminLoadConfiguratio
 
 }
 ]]></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">
+</div></div>&#160;<p>And the <strong><code>etc/stuff.cfg</code></strong> 
configuration file contains:</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[greeting=Bye
 echo=Yay
 destination=mock:result
@@ -526,7 +521,7 @@ destination=mock:result
 &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">
+</div></div>&#160;<p>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><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;
@@ -545,7 +540,7 @@ destination=mock:result
 &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">
+</div></div>&#160;<p>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>.</p><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;
   &lt;simple&gt;{{file.rootdir}}/${in.header.CamelFileName}&lt;/simple&gt;
 &lt;/setHeader&gt;
@@ -566,7 +561,7 @@ protected Properties useOverrideProperti
     return extra;
 }
 ]]></script>
-</div></div>This can be done from any of the Camel Test kits, such as 
<code>camel-test</code>, <code>camel-test-spring</code> and 
<code>camel-test-blueprint</code>.<p>The 
<strong><code>ignoreMissingLocationWithPropertiesComponent</code></strong> can 
be used to instruct Camel to ignore any locations which was not discoverable. 
For example if you run the unit test, in an environment that does not have 
access to the location of the properties.</p><h3 
id="Properties-Using@PropertyInject">Using&#160;<code>@PropertyInject</code></h3><p><strong>Available
 as of Camel 2.12</strong></p><p>Camel allows to inject property placeholders 
in POJOs using the&#160;<strong><code>@PropertyInject</code></strong> 
annotation which can be set on fields and setter methods. For example you can 
use that with <strong><code>RouteBuilder</code></strong> classes, such as shown 
below:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+</div></div>&#160;<p>This can be done from any of the Camel Test kits, such as 
<code>camel-test</code>, <code>camel-test-spring</code> and 
<code>camel-test-blueprint</code>.</p><p>The 
<strong><code>ignoreMissingLocationWithPropertiesComponent</code></strong> can 
be used to instruct Camel to ignore any locations which was not discoverable. 
For example if you run the unit test, in an environment that does not have 
access to the location of the properties.</p><h3 
id="Properties-Using@PropertyInject">Using&#160;<code>@PropertyInject</code></h3><p><strong>Available
 as of Camel 2.12</strong></p><p>Camel allows to inject property placeholders 
in POJOs using the&#160;<strong><code>@PropertyInject</code></strong> 
annotation which can be set on fields and setter methods. For example you can 
use that with <strong><code>RouteBuilder</code></strong> classes, such 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[public class MyRouteBuilder extends 
RouteBuilder {
 
     @PropertyInject(&quot;hello&quot;)
@@ -641,7 +636,8 @@ export $FOO_SERVICE_PORT=8888]]></script
   public String getName() {
     return &quot;beer&quot;;
   }
-  @Override
+
+  @Override
   public String apply(String remainder) {
     return &quot;mock:&quot; + remainder.toLowerCase();
   }

Modified: websites/production/camel/content/using-propertyplaceholder.html
==============================================================================
--- websites/production/camel/content/using-propertyplaceholder.html (original)
+++ websites/production/camel/content/using-propertyplaceholder.html Thu Sep  8 
17:19:22 2016
@@ -86,7 +86,7 @@
        <tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><h2 
id="UsingPropertyPlaceholder-UsingPropertyPlaceholder">Using&#160;<code>PropertyPlaceholder</code></h2><p><strong>Available
 as of Camel 2.3</strong></p><p>Camel now provides a new 
<strong><code>PropertiesComponent</code></strong> in 
<strong>camel-core</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 
have a limitation which prevents 3rd party frameworks to leverage Spring 
property placeholders to the fullest.</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 generally in use when 
doing:</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="UsingPropertyPlaceholder-Syntax">Syntax</h3><p>The 
syntax to use Camel's property placeholder is to use 
<strong>{{<code>key</code>}}</strong> for example 
<strong>{{<code>file.uri</code>}}</strong> where 
<strong><code>file.uri</code></strong> is the property key. You can use 
property placeholders in parts of the endpoint URI's which for example you can 
use placeholders for parameters in the URIs.</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 
au
 i-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="UsingPropertyPlaceholder-UsingPropertyResolver">Using&#160;<code>PropertyResolver</code></h3><p>Camel
 provides a pluggable mechanism which allows 3rd part to provide their own 
resolver to lookup properties. 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>. You can prefix the locations 
with either:</p><ul class="alternate"><li><strong><code>ref:</code> Camel 
2.4:</strong> to lookup in the <a shape="rect" 
href="registry.html">Registry.</a></li><li><strong><code>file:</code></strong> 
to loa
 d the from file system.</li><li><strong><code>classpath:</code></strong> to 
load from classpath (this is also the default if no prefix is 
provided).</li><li><strong><code>blueprint:</code> Camel 2.7:</strong> to use a 
specific OSGi blueprint placeholder service.</li></ul><h3 
id="UsingPropertyPlaceholder-DefiningLocation">Defining Location</h3><p>The 
<strong><code>PropertiesResolver</code></strong> need to know a location(s) 
where to resolve the properties. You can define 1 to many locations. If you 
define the location in a single String property you can separate multiple 
locations with comma such as:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div class="wiki-content maincontent"><h2 
id="UsingPropertyPlaceholder-UsingPropertyPlaceholder">Using&#160;<code>PropertyPlaceholder</code></h2><p><strong>Available
 as of Camel 2.3</strong></p><p>Camel now provides a new 
<strong><code>PropertiesComponent</code></strong> in 
<strong>camel-core</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 3rd 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-i
 con 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 generally in use when 
doing 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="UsingPropertyPlaceholder-Syntax">Syntax</h3><p>The syntax to use Camel's 
property placeholder is to use <strong>{{<code>key</code>}}</strong> for 
example <strong>{{<code>file.uri</code>}}</strong> where 
<strong><code>file.uri</code></strong> is the property key. You can use 
property placeholders in parts of the endpoint URI's which for example you can 
use placeholders for parameters in the URIs.</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="UsingPropertyPlaceholder-UsingPropertyResolver">Using&#160;<code>PropertyResolver</code></h3><p>Camel
 provides a pluggable mechanism which allows 3rd part to provide their own 
resolver to lookup properties. 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>. You can prefix the locations 
with either:</p><ul class="alternate"><li><strong><code>ref:</code> Camel 
2.4:</strong> to lookup in the <a shape="rect" 
href="registry.html">Registry.</a></li><li><strong><code>file:</code><
 /strong> to load the from file 
system.</li><li><strong><code>classpath:</code></strong> to load from classpath 
(this is also the default if no prefix is 
provided).</li><li><strong><code>blueprint:</code> Camel 2.7:</strong> to use a 
specific OSGi blueprint placeholder service.</li></ul><h3 
id="UsingPropertyPlaceholder-DefiningLocation">Defining Location</h3><p>The 
<strong><code>PropertiesResolver</code></strong> need to know a location(s) 
where to resolve the properties. You can define 1 to many locations. If you 
define the location in a single String property you can separate multiple 
locations with comma 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[pc.setLocation(&quot;com/mycompany/myprop.properties,com/mycompany/other.properties&quot;);
 ]]></script>
 </div></div><h4 
id="UsingPropertyPlaceholder-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">
@@ -198,7 +198,7 @@ bar.quote=Beer tastes good
 from(&quot;direct:start&quot;)
     .transform().simple(&quot;Hi ${body}. 
${properties:com/mycompany/bar.properties:bar.quote}.&quot;);
 ]]></script>
-</div></div><h3 
id="UsingPropertyPlaceholder-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>The example below 
has property placeholder in 
the&#160;<strong><code>&lt;jmxAgent&gt;</code></strong> tag:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><h3 
id="UsingPropertyPlaceholder-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;
 
@@ -214,7 +214,7 @@ from(&quot;direct:start&quot;)
         &lt;to uri=&quot;mock:result&quot;/&gt;
     &lt;/route&gt;
 &lt;/camelContext&gt;]]></script>
-</div></div><p>You can also define property placeholders in the various 
attributes on the&#160;<strong><code>&lt;camelContext&gt;</code></strong> tag 
such as <strong><code>trace</code></strong> as shown here:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</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;
 
@@ -254,14 +254,12 @@ System.clearProperty(&quot;cool.result&q
         
 assertMockEndpointsSatisfied();
 ]]></script>
-</div></div><h3 
id="UsingPropertyPlaceholder-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 
<code>prop</code> pre
 fix 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">
+</div></div><h3 
id="UsingPropertyPlaceholder-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</c
 ode></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;
+       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;
 
     &lt;!-- Notice in the declaration above, we have defined the prop prefix 
as the Camel placeholder namespace --&gt;
 
@@ -270,7 +268,6 @@ assertMockEndpointsSatisfied();
     &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;
@@ -303,8 +300,7 @@ assertMockEndpointsSatisfied();
 <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;
+           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;!-- OSGI blueprint property placeholder --&gt;
     &lt;cm:property-placeholder id=&quot;myblueprint.placeholder&quot; 
persistent-id=&quot;camel.blueprint&quot;&gt;
@@ -328,8 +324,7 @@ assertMockEndpointsSatisfied();
 <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;
+           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;!-- OSGI blueprint property placeholder --&gt;
     &lt;cm:property-placeholder id=&quot;myblueprint.placeholder&quot; 
persistent-id=&quot;camel.blueprint&quot;&gt;
@@ -381,7 +376,7 @@ assertMockEndpointsSatisfied();
 
 &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">
+</div></div>&#160;<p>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:</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) {
@@ -392,7 +387,7 @@ protected String useOverridePropertiesWi
     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="UsingPropertyPlaceholder-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 
ServieMix/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">
+</div></div>&#160;<p>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="UsingPropertyPlaceholder-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 
ServieMix/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</c
 ode></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;
@@ -412,7 +407,7 @@ protected String useOverridePropertiesWi
 
 &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">
+</div></div>&#160;<p>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:</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[] loadConfigAdminConfigurationFile() {
@@ -421,7 +416,7 @@ protected String[] loadConfigAdminConfig
     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 2nd 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">
+</div></div>&#160;<p>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 2nd 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><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
 greeting=Bye
 ]]></script>
@@ -463,7 +458,7 @@ greeting=Bye
 
 &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">
+</div></div>&#160;<p>And in the unit test class we do 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[
 /**
  * This example will load a Blueprint .cfg file (which will initialize 
configadmin), and also override its property
@@ -508,7 +503,7 @@ public class ConfigAdminLoadConfiguratio
 
 }
 ]]></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">
+</div></div>&#160;<p>And the <strong><code>etc/stuff.cfg</code></strong> 
configuration file contains:</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[greeting=Bye
 echo=Yay
 destination=mock:result
@@ -523,7 +518,7 @@ destination=mock:result
 &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">
+</div></div>&#160;<p>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><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;
@@ -542,7 +537,7 @@ destination=mock:result
 &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="UsingPropertyPlaceholder-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">
+</div></div>&#160;<p>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>.</p><h4 
id="UsingPropertyPlaceholder-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;
   &lt;simple&gt;{{file.rootdir}}/${in.header.CamelFileName}&lt;/simple&gt;
 &lt;/setHeader&gt;
@@ -563,7 +558,7 @@ protected Properties useOverrideProperti
     return extra;
 }
 ]]></script>
-</div></div>This can be done from any of the Camel Test kits, such as 
<code>camel-test</code>, <code>camel-test-spring</code> and 
<code>camel-test-blueprint</code>.<p>The 
<strong><code>ignoreMissingLocationWithPropertiesComponent</code></strong> can 
be used to instruct Camel to ignore any locations which was not discoverable. 
For example if you run the unit test, in an environment that does not have 
access to the location of the properties.</p><h3 
id="UsingPropertyPlaceholder-Using@PropertyInject">Using&#160;<code>@PropertyInject</code></h3><p><strong>Available
 as of Camel 2.12</strong></p><p>Camel allows to inject property placeholders 
in POJOs using the&#160;<strong><code>@PropertyInject</code></strong> 
annotation which can be set on fields and setter methods. For example you can 
use that with <strong><code>RouteBuilder</code></strong> classes, such as shown 
below:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
+</div></div>&#160;<p>This can be done from any of the Camel Test kits, such as 
<code>camel-test</code>, <code>camel-test-spring</code> and 
<code>camel-test-blueprint</code>.</p><p>The 
<strong><code>ignoreMissingLocationWithPropertiesComponent</code></strong> can 
be used to instruct Camel to ignore any locations which was not discoverable. 
For example if you run the unit test, in an environment that does not have 
access to the location of the properties.</p><h3 
id="UsingPropertyPlaceholder-Using@PropertyInject">Using&#160;<code>@PropertyInject</code></h3><p><strong>Available
 as of Camel 2.12</strong></p><p>Camel allows to inject property placeholders 
in POJOs using the&#160;<strong><code>@PropertyInject</code></strong> 
annotation which can be set on fields and setter methods. For example you can 
use that with <strong><code>RouteBuilder</code></strong> classes, such 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[public class MyRouteBuilder extends 
RouteBuilder {
 
     @PropertyInject(&quot;hello&quot;)
@@ -638,7 +633,8 @@ export $FOO_SERVICE_PORT=8888]]></script
   public String getName() {
     return &quot;beer&quot;;
   }
-  @Override
+
+  @Override
   public String apply(String remainder) {
     return &quot;mock:&quot; + remainder.toLowerCase();
   }


Reply via email to