Mule:迁移到新的 HTTP 连接器

Mule: Migrating to the New HTTP Connector

我已经从 Mule 3.5.x 升级到 3.6.x,因为旧的 http 传输在 3.6.x 中被弃用了,我想迁移到新的 HTTP连接器。

这是调用我的网络服务的原始代码:

<http:outbound-endpoint ref="OrderEndpoint" doc:name="GetApprovedOrder">
    <cxf:jaxws-client serviceClass="com.acme.orders.IOrderServiceBean"
                port="OrderServiceBean_v2_0Port"
                operation="getApprovedOrderOp" />
</http:outbound-endpoint>

我对新连接器的看法如下:

<cxf:jaxws-client serviceClass="com.acme.orders.v2_0.IOrderServiceBean" port="OrderServiceBean_v2_0Port" operation="getApprovedOrderOp" />
<http:request config-ref="http.request.config" path="acme-services/OrderServiceBean_v2_0" method="POST" />

我遇到的问题是,使用旧版本的代码,在调用 Web 服务后,有效负载将是响应 [java] 对象。使用新版本的代码,有效载荷是一个 org.glassfish.grizzly.utils.BufferInputStream 包含肥皂 xml.

我可以结合使用 xpath 和 jaxb-xml-object-transformer 将流的内容转换为响应对象,但这看起来像是倒退。

我研究过在没有请求的情况下使用 jaxws-client 以及 ws-consumer,但我的以下要求似乎排除了这些选项(除非我只是误解了如何使用它们)。

解决方案是:将您的元素包装到处理器链中

如下:

<processor-chain>
    <cxf:jaxws-client serviceClass="com.acme.orders.v2_0.IOrderServiceBean" port="OrderServiceBean_v2_0Port" operation="getApprovedOrderOp" />
    <http:request config-ref="http.request.config" path="acme-services/OrderServiceBean_v2_0" method="POST" />
</processor-chain>

这是因为 cxf 正在拦截,所以在处理器链之后,您将拥有与之前解决方案中相同的对象。