File default.properties contains an entry like: key=ENC(..)
The following Camel Spring DSL snippet decrypts the
property value inside <camelContext> via {{key}} but does
not decrypt it outside of the <camelContext> via ${key}:
<bean id="jasypt" class="org.apache.camel.component.jasypt.JasyptPropertiesParser">
<property name="password" value="sysenv:PROPERTIES_KEY"/>
</bean>
<bean id="bridgePropertyPlaceholder" class=
"org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer">
<property name="locations" >
<list>
<value>classpath:default.properties</value>
</list></property>
<property name='parser' ref='jasypt'/>
</bean>
In order to get ${} to decrypt, first I remove all of the above.
Then I add jasypt dependencies to pom.xml:
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<classifier>lite</classifier>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt-spring3</artifactId>
<version>1.9.2</version>
</dependency>
And add the following to Camel Spring DSL:
<bean id="environmentVariablesConfiguration"
class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="passwordEnvName" value="PROPERTIES_KEY" />
</bean>
<bean id="configurationEncryptor"
class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="environmentVariablesConfiguration" />
</bean>
<bean id="propertyConfigurer" class=
'org.jasypt.spring3.properties.EncryptablePropertyPlaceholderConfigurer'>
<constructor-arg ref="configurationEncryptor"/>
<property name="locations" >
<list>
<value>classpath:default.properties</value>
</list></property>
</bean>
<bean id="jasypt" class=
"org.apache.camel.component.jasypt.JasyptPropertiesParser">
<property name="password" value="sysenv:PROPERTIES_KEY"/>
</bean>
<!-- And inside the camelContext... -->
<camelContext xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties"
propertiesParserRef="jasypt"
location="classpath:default.properties"/>
This is the only solution that I could discover. Using BridgePropertyPlaceholder
didn't work. <propertyPlaceholder> must be used inside <camelContext>.