2013-02-08 19 views
1

我正在使用骆驼来代理web服务(我需要先修改肥皂标题)。我使用CXF_MESSAGE数据格式,因为这使我可以轻松更改肥皂标题。 使用soapui发送肥皂信息的工作正常,我可以看到它到达真正的webservice,但是,响应始终是一个空的肥皂信封?当我切换到MESSAGE数据格式时,响应是正确的(但是我不能更改SOAP标头)。骆驼代理的web服务返回一个空的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> 

回答

1

据我所知,还有根本没有这样的CXF_MESSAGE数据格式。有POJO(默认),PAYLOADMESSAGE。使用MESSAGE数据格式,您将无法处理任何SOAP - 此模式适用于不处理SOAP

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

参见:

+0

CXF_MESSAGE在骆驼2.8.2添加。 (在你的第二个链接中提到)切换到PAYLOAD给了我一个org.apache.camel.component.cxf.CxfPayload,当我提出我的请求时,不能转换为javax.xml.soap.SOAPMessage。还是'to'端点也需要成为CXF bean? –

+1

是的。它也需要是一个骆驼cxf bean。首先,您必须创建一个类并实现处理器界面。然后在你的spring中创建一个它的bean,并将它从(从)端点'转发到'你的骆驼bean:' />'然后'转换为'real ws。 –

+0

哎呀忘了删除我的处理器,扔了classcast。当我删除处理器并使用PAYLOAD时,我始终得到一个HTTP操作失败,调用http:// localhost:8088/mockBinding和statusCode:500作为响应。 (我使用SoapMock来测试我的设置,因此'mockBinding' –