Blueprint property placeholder does not work with http conduit configuration

Solution In Progress - Updated -

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.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content