Blueprint property placeholder does not work with http conduit configuration
Issue
I am trying to setup an HTTP conduit configuration that uses Apache Aries Blueprint property-placeholder to inject trust store parameters. The conduit works when I explicitly configure the trust store properties. Unfortunately, when I use placeholders it fails.
Here is my http:conduit configuration:
<http:conduit name="*.http-conduit">
<http:client ConnectionTimeout="30000" ReceiveTimeout="30000" AutoRedirect="true" Connection="Keep-Alive"></http:client>
<http:tlsClientParameters disableCNCheck="${disableCNCheck}">
<sec:keyManagers keyPassword="${keyPassword}">
<sec:keyStore file="${keyStoreFile}" password="${keyStorePassword}" type="${keyStoreType}"></sec:keyStore>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore file="${trustStoreFile}" password="${trustStorePassword}" type="${trustStoreType}"></sec:keyStore>
</sec:trustManagers>
<sec:certAlias>${certAlias}</sec:certAlias>
<sec:cipherSuitesFilter>
<sec:include>.*_WITH_3DES_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:exclude>.*_WITH_NULL_.*</sec:exclude>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
</http:conduit>
I have already configured default value for all property placeholders:
<cm:property-placeholder id="myProps" persistent-id="da.ws" update-strategy="reload">
<cm:default-properties>
<cm:property name="client.host" value="localhost"/>
<cm:property name="keyStoreFile" value="src/test/resources/clientTrustStore.jks"/>
<cm:property name="keyStorePassword" value="cspass"/>
<cm:property name="keyPassword" value="cspass"/>
<cm:property name="keyStoreType" value="jks"/>
<cm:property name="certAlias" value="fusedev"/>
<cm:property name="trustStoreFile" value="src/test/resources/clientTrustStore.jks"/>
<cm:property name="trustStorePassword" value="cspass"/>
<cm:property name="trustStoreType" value="jks"/>
<cm:property name="disableCNCheck" value="true"/>
...
However, I am getting this error:
org.osgi.service.blueprint.container.ComponentDefinitionException: Error when instantiating bean #route-4 of class class org.apache.cxf.configuration.jsse.TLSClientParametersConfig
at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:315)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:806)
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:787)
...
Caused by: java.security.KeyStoreException: ${keyStoreType} not found
at java.security.KeyStore.getInstance(KeyStore.java:616)
at org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils.getKeyStore(TLSParameterJaxBUtils.java:120)
at org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils.getKeyManagers(TLSParameterJaxBUtils.java:264)
at org.apache.cxf.configuration.jsse.TLSClientParametersConfig.createTLSClientParametersFromType(TLSClientParametersConfig.java:110)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:297)
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:958)
at org.apache.aries.blueprint.container.BeanRecipe.getInstance(BeanRecipe.java:313)
... 76 more
Caused by: java.security.NoSuchAlgorithmException: ${keyStoreType} KeyStore not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at java.security.Security.getImpl(Security.java:695)
at java.security.KeyStore.getInstance(KeyStore.java:613)
... 86 more
Environment
- JBoss Fuse
- 6.1
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.