Java 驼峰代理web服务返回一个空soap信封

Java 驼峰代理web服务返回一个空soap信封,java,cxf,apache-camel,Java,Cxf,Apache Camel,我正在使用Camel代理一个web服务(我需要首先修改soap头)。我正在使用CXF_消息数据格式,因为它允许我轻松地更改soap头。 使用soapui发送soap消息效果很好,我可以看到它到达真正的Web服务,但是,响应总是一个空的soap信封?当我切换到消息dataformat时,响应是正确的(但是我不能更改SOAP头) 我做错了什么?为什么数据格式会改变输入/输出行为 <cxf:cxfEndpoint id="broker"> ... </cxf:cxfEnd

我正在使用Camel代理一个web服务(我需要首先修改soap头)。我正在使用CXF_消息数据格式,因为它允许我轻松地更改soap头。 使用soapui发送soap消息效果很好,我可以看到它到达真正的Web服务,但是,响应总是一个空的soap信封?当我切换到消息dataformat时,响应是正确的(但是我不能更改SOAP头)

我做错了什么?为什么数据格式会改变输入/输出行为

<cxf:cxfEndpoint id="broker">
      ...
</cxf:cxfEndpoint>

<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
    <endpoint id="realWS" uri="http://localhost:8080/service?throwExceptionOnFailure=true" />

    <route>
        <from uri="cxf:bean:broker?dataFormat=CXF_MESSAGE" />
        <to ref="realWS" />
    </route>        
</camelContext>

...

据我所知,根本没有这样的
CXF\u消息
数据格式。有
POJO
(默认值)、
有效载荷
消息
。使用
消息
数据格式,您将无法处理任何
SOAP
——此模式适用于无
SOAP
处理

为了处理
SOAP
标题,您需要指定
有效负载
数据格式。然后您将能够处理
SOAP
标题。检查如何执行此操作注意:在这个链接中,路由是通过Java代码完成的。为了通过Spring实现这一点,您必须创建自己的URI,然后从URI将消息转发到自定义处理器,修改头并将其发送回真正的端点

另请参见:


CXF_消息添加到Camel 2.8.2中。(在您的第二个链接中提到)切换到PAYLOAD会给我一个org.apache.camel.component.cxf.CxfPayload,在我发出请求时无法转换为javax.xml.soap.SOAPMessage。或者“to”端点也需要是cxfbean吗?是的。它还需要是一个camelcxfbean。首先,您必须创建一个类并实现处理器接口。然后在spring中创建一个bean,并将它(从)端点
转发到
您的驼峰bean:
然后
转发到真正的ws.Oops忘了删除我的处理器,这导致了classcast。当我移除处理器并使用有效负载时,我总是得到一个HTTP操作调用失败,statusCode:500作为响应。(我使用SoapMock来测试我的设置,因此使用了“mockBinding”。现在两个端点都是骆驼cxf bean,使用dataformat负载。请求仍然正确到达,响应现在是soap错误,消息为“无法解析流”。)。(soap头转换没有问题,暂时删除了它,只是希望基本的请求/响应交换工作)解决了,SoapUI使用gzip压缩响应:。尽管如此,仍然希望让它与CXF_消息一起工作,但至少我现在有一个工作选项。