【问题标题】:camel proxied web service returns an empty soap envelope骆驼代理的 Web 服务返回一个空的肥皂信封
【发布时间】:2013-02-08 18:11:23
【问题描述】:

我正在使用 Camel 代理 web 服务(我需要先修改soap 标头)。我正在使用 CXF_MESSAGE 数据格式,因为它可以让我轻松更改肥皂标题。 使用soapui 发送soap 消息工作正常,我可以看到它到达了真正的web 服务,但是,响应总是一个空的soap 信封?当我切换到 MESSAGE 数据格式时,响应是正确的(但我无法更改 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>

【问题讨论】:

    标签: java cxf apache-camel


    【解决方案1】:

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

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

    另请参阅:

    【讨论】:

    • CXF_MESSAGE 在 Camel 2.8.2 中添加。 (在您的第二个链接中提到)切换到 PAYLOAD 给了我一个 org.apache.camel.component.cxf.CxfPayload 在我提出请求时无法转换为 javax.xml.soap.SOAPMessage 。还是“to”端点也需要是 CXF bean?
    • 是的。它还需要是一个camel cxf bean。首先,您必须创建一个类并实现处理器接口。然后在你的 spring 中创建一个 bean 并将它(从)转发到端点 to 你的骆驼豆:&lt;camel:bean ref="yourCustomProcessor"/&gt; 然后 to real ws。
    • 哎呀忘了删除我的处理器,这抛出了类播。当我移除处理器并使用 PAYLOAD 时,我总是得到一个 HTTP 操作失败,调用 localhost:8088/mockBinding 并使用 statusCode: 500 作为响应。 (我使用 SoapMock 来测试我的设置,因此使用了“mockBinding”。
    • 两个端点现在都是骆驼 cxf bean,使用数据格式 PAYLOAD。请求仍然正确到达,响应现在是带有消息“无法解析流”的肥皂错误。 (soap 标头转换没问题,暂时删除它,只希望基本的请求/响应交换工作)
    • 已解决,SoapUI 使用 gzip 压缩响应:camel.465427.n5.nabble.com/…。虽然仍然想让它与 CXF_MESSAGE 一起工作,但至少我现在有 1 个工作选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多