Soap 骆驼JMS CXF端点不';无法创建新的临时应答队列

Soap 骆驼JMS CXF端点不';无法创建新的临时应答队列,soap,jms,cxf,apache-camel,jbossfuse,Soap,Jms,Cxf,Apache Camel,Jbossfuse,我有两个使用JMS作为传输的CXF端点;一个用作消费者,另一个用作生产者。这是一个非常精简的设置 <camelcxf:cxfEndpoint xmlns:i="http://inbound.com/inbound" id="myInboundEndpoint" endpointName="i:InboundService" serviceName="i:Inb

我有两个使用JMS作为传输的CXF端点;一个用作消费者,另一个用作生产者。这是一个非常精简的设置

<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>

肌肉治疗术
但是,当调用第二个路由时,CXF组件或camel会尝试重新使用原始入站消息(包括应答队列)中的所有JMS配置,而不是仅为此交换创建另一个临时应答队列。这似乎是来自in消息的标题

如果您只是使用纯JMS并将CXF从等式中去掉,那么camel将正确地为路由的内部部分创建一个新队列,尽管我需要继续使用CXF,因为我必须使用一些遗留拦截器

我尝试了使用jms://+JMSConfig样式和camel://样式

我目前使用的是jaxws:client方法,只是引用了使用bean:myBean?method=myMethod的方法,该方法可以工作,但不允许我从原始入站方法传播SOAP头,因此转而使用cxf:endpoint

我试图找到一个使用CXF通过JMS使用SOAP的人的例子,但似乎没有具体的例子


所以问题是。。。。是否需要为我的生产者进行任何其他配置,或者是否有其他方法可以使用CXF通过JMS执行SOAP,并传播/设置原始消息/骆驼交换中的一些头

我认为您可能需要从inMessage中筛选replyTo的标题


如果希望使用SOAP over JMS,则可以在地址上指定所有与JMS相关的设置,而无需对JMS配置进行黑客攻击。以下是您可以作为示例的示例。

嗨,Willem,我尝试剥离JMS*头。还有其他的头我应该脱掉吗?也许是骆驼特有的?实际上我们也试着去掉所有的标题,但没有效果。顺便说一句,我从camel文档中获得了JMSConfig样式。如果有首选方法,可能值得更新。假设您使用URI在CXF组件选项和连接池上设置了POJO/有效负载?您可以编写简单的CXF客户端来验证设置吗?我只是检查CXF代码,如果没有在JMSConfig上设置ReplyToDestination,CXFJmsConduit将不会为此调用jmsMessage.setJMSReplyTo。所以我不确定您提到的是哪种类型的回复队列。如果我使用cxf客户端,那么它可以正常工作,但因为我只是在与Java接口交谈,所以无法正确设置自定义SOAP头?这需要使用一个CXF拦截器来完成,该拦截器不能访问驼峰上下文。还是我把棍子的一端搞错了?我认为如果不设置replyToName,默认行为是自动创建临时队列?我猜问题可能是由于在camel和cxf端点之间共享相同的activemq连接配置造成的。您可以尝试分别配置cxf端点和camel activemq吗。