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,但我的以下要求似乎排除了这些选项(除非我只是误解了如何使用它们)。
- 我需要使用契约优先方法来调用 Web 服务,参见上面我指定的 serviceClass 而不是 wsdl。
- Web 服务使用基本身份验证,因此我需要指定用户名和密码。
- 我需要能够指定 Web 服务的主机和端口(或至少是地址)。
解决方案是:将您的元素包装到处理器链中
如下:
<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 正在拦截,所以在处理器链之后,您将拥有与之前解决方案中相同的对象。
我已经从 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,但我的以下要求似乎排除了这些选项(除非我只是误解了如何使用它们)。
- 我需要使用契约优先方法来调用 Web 服务,参见上面我指定的 serviceClass 而不是 wsdl。
- Web 服务使用基本身份验证,因此我需要指定用户名和密码。
- 我需要能够指定 Web 服务的主机和端口(或至少是地址)。
解决方案是:将您的元素包装到处理器链中
如下:
<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 正在拦截,所以在处理器链之后,您将拥有与之前解决方案中相同的对象。