Properties placeholders on camel-cxf configuration in Blueprint

Solution In Progress - Updated -

Issue

I am using property placeholder for a camel route that involves camel-cxf endpoint in blueprint. Some of the CXF bean configuration elements seem not to resolve the property placeholders:

<cm:property-placeholder id="myPlaceHolder" persistent-id="cmProp" placeholder-prefix="{{" placeholder-suffix="}}">
      <cm:default-properties>
          <cm:property name="propDir" value="/Users/jluo/config" ></cm:property>
          <cm:property name="propFile" value="wss4jConfig.properties" ></cm:property>
      </cm:default-properties>
  </cm:property-placeholder>

  <ext:property-placeholder id="ext-placeholder">
      <ext:default-properties>
      </ext:default-properties>
      <ext:location>file:{{propDir}}/{{propFile}}</ext:location>
  </ext:property-placeholder>

  <camelcxf:cxfEndpoint id="reportIncident"
                    address="{{connector.input.http.cxf}}"
                    wsdlURL="META-INF/wsdl/report_incident.wsdl"
                    serviceClass="org.apache.camel.example.reportincident.ReportIncidentEndpoint"
                    endpointName="s:ReportIncidentService"
                    serviceName="s:ReportIncidentEndpointService"
                    xmlns:s="http://reportincident.example.camel.apache.org">
      <camelcxf:inInterceptors>
          <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
          <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
              <property name="properties">
                  <map>
                      <entry key="action" value="Signature"></entry>
                      <entry key="user" value="clientx509v1"></entry>
                      <entry key="passwordCallbackClass" value="org.apache.camel.example.reportincident.ServerUTPasswordCallback"></entry>
                      <entry key="signaturePropRefId" value="inSignatureProperties"></entry>
                      <entry key="inSignatureProperties" value-ref="inCryptoProperties"></entry>
                      <entry key="signatureKeyIdentifier" value="DirectReference"></entry>
                  </map>
              </property>
          </bean>
          <bean class="org.apache.cxf.ws.security.wss4j.DefaultCryptoCoverageChecker">
              <property name="signBody">
                  <value type="java.lang.Boolean">true</value>
              </property>
          </bean>
      </camelcxf:inInterceptors>
      <camelcxf:outInterceptors>          
        <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
          <bean class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
              <property name="properties">
                  <map>
                      <entry key="action" value="Signature"></entry>
                      <entry key="user" value="serverx509v1"></entry>
                      <entry key="passwordCallbackClass" value="org.apache.camel.example.reportincident.ServerUTPasswordCallback"></entry>
                      <entry key="signaturePropRefId" value="outSignatureProperties"></entry>
                      <entry key="outSignatureProperties" value-ref="outCryptoProperties"></entry>>
                      <entry key="signatureKeyIdentifier" value="DirectReference"></entry>
                      <entry key="signatureParts" value="{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body"></entry>
                  </map>
              </property>
          </bean>
    </camelcxf:outInterceptors>
    <camelcxf:properties>
    <entry key="dataFormat" value="CXF_MESSAGE"></entry>
    </camelcxf:properties>
  </camelcxf:cxfEndpoint>

    <bean id="inCryptoProperties" class="java.util.Properties">
      <argument>
        <props>
          <prop key="org.apache.ws.security.crypto.provider">org.apache.ws.security.components.crypto.Merlin</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.type">jsk</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.password">storepassword</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.alias">clientx509v1</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.file">{{connector.input.http.cxf.keystore}}</prop>
        </props>
      </argument>
    </bean>

    <bean id="outCryptoProperties" class="java.util.Properties">
      <argument>
        <props>
          <prop key="org.apache.ws.security.crypto.provider">org.apache.ws.security.components.crypto.Merlin</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.type">jks</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.password">storepassword</prop>
          <prop key="org.apache.ws.security.crypto.merlin.keystore.alias">serverx509v1</prop> 
          <prop key="org.apache.ws.security.crypto.merlin.keystore.file">{{connector.output.http.cxf.keystore}}</prop> 
        </props>
      </argument>
    </bean>

  <bean id="reporaIncidentProcessor" class="org.apache.camel.example.reportincident.ReportIncidentProcessor"></bean>

  <camelContext id="camel" xmlns="http://camel.apache.org/schema/blueprint">
    <route>
        <from uri="cxf:bean:reportIncident"></from>
        <process ref="reporaIncidentProcessor"></process>
    </route>
    <route>
        <from uri="timer://foo?repeatCount=1"></from>
        <log message="The property value of connection.input.http.cxf: {{connector.input.http.cxf}}"></log>
    </route>
  </camelContext>

</blueprint>

The property placeholder

address="{{connector.input.http.cxf}}"

works fine for camel-cxf endpoint while the property placeholders defined in the Properties beans:

<prop key="org.apache.ws.security.crypto.merlin.keystore.file">{{connector.input.http.cxf.keystore}}</prop>

and

<prop key="org.apache.ws.security.crypto.merlin.keystore.file">{{connector.output.http.cxf.keystore}}</prop>

do not work.

Any idea why?

Environment

  • Red Hat JBoss Fuse
    • 6.x
  • Blueprint

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