JMS をトランスポートとして使用する 2 つの CXF エンドポイントがあります。1 つはコンシューマーとして使用され、もう 1 つはプロデューサーとして使用されます。これは非常にトリミングされたセットアップです。
<camelcxf:cxfEndpoint xmlns:i="http://inbound.com/inbound"
id="myInboundEndpoint"
endpointName="i:InboundService"
serviceName="i:InboundService"
address="camel://direct:my-inbound-route"
serviceClass="com.InboundService"
bus="cxf"
wsdlURL="classpath:META-INF/wsdl/inbound.wsdl">
<camelcxf:properties>
<entry key="dataFormat" value="POJO"/>
</camelcxf:properties>
</camelcxf:cxfEndpoint>
<camelcxf:cxfEndpoint xmlns:o="http://outbound.com/outbound"
id="myOutboundEndpoint"
endpointName="o:OutboundService"
serviceName="o:OutboundService"
address=""jms://""
serviceClass="com.OutboundService"
bus="cxf"
wsdlURL="classpath:META-INF/wsdl/outbound.wsdl">
<camelcxf:properties>
<entry key="dataFormat" value="POJO"/>
</camelcxf:properties>
<camelcxf:features>
<bean class="org.apache.cxf.transport.jms.JMSConfigFeature">
<property name="jmsConfig" ref="jmsConfig" />
</bean>
</camelcxf:features>
</camelcxf:cxfEndpoint>
<bean id="jmsConfig" class="org.apache.cxf.transport.jms.JMSConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory" />
<property name="targetDestination" value="some-queue" />
</bean>
<camelContext>
<route id="inQueue">
<from uri="activemq:inbound-queue" />
<to uri="direct:my-inbound-route" />
</route>
<route id="inVm">
<from uri="direct:in-vm" />
<to uri="direct:my-inbound-route" />
</route>
<route id="serviceProxy">
<from uri="cxf:bean:myInboundEndpoint?synchronous=true" />
<setHeader headerName="operationName"><constant>myOtherOperation</constant></setHeader>
<to uri="cxf:bean:outboundEndpoint?synchronous=true" />
</route>
</camelContext>
しかし、2 番目のルートが呼び出されると、CXF コンポーネントまたは camel は、この交換のためだけに別の一時応答キューを作成するのではなく、応答キューを含む元のインバウンド メッセージからすべての JMS 構成を再利用しようとします。これは、メッセージ内のヘッダーから取得されたようです。
純粋な JMS を使用し、CXF を方程式から外した場合、camel はルートの内側の部分に新しいキューを正しく作成しますが、CXF を引き続き使用する必要があります。
jms:// + JMSConfig スタイルと camel:// スタイルの両方を使用してみました。
現在、jaxws:client アプローチを使用しており、bean:myBean?method=myMethod を使用して参照しているだけですが、元のインバウンド メソッドから SOAP ヘッダーを伝播することはできないため、代わりに cxf:endpoint を使用するように切り替えています。
CXF を使用して SOAP over JMS を使用している例を見つけようとしましたが、具体的な例はないようです。
質問は....プロデューサーのために行う必要がある追加の構成はありますか、それともCXFを使用してJMSを介してSOAPを実行し、元のメッセージ/ラクダ交換からいくつかのヘッダーを伝播/設定できる方法はありますか?