Mule:迁移到新的HTTP连接器

时间:2015-06-10 11:31:59

标签: http mule cxf

我已经从Mule 3.5.x升级到3.6.x,并且由于旧的http传输在3.6.x中已弃用,我想迁移到新的HTTP连接器。

以下是调用我的webservice的原始代码:

<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]对象。使用新版本的代码,有效负载是包含soap xml的org.glassfish.grizzly.utils.BufferInputStream。

我可以使用xpath和jaxb-xml-object-transformer的组合将流的内容转换为响应对象,但这似乎是向后的步骤。

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

  • 我需要使用契约第一种方法来调用Web服务,请参阅上面我指定的serviceClass而不是wsdl。
  • Web服务使用基本身份验证,因此我需要指定用户名和密码。
  • 我需要能够指定Web服务的主机和端口(或至少地址)。

1 个答案:

答案 0 :(得分:2)

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

如下:

<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是拦截的,因此在处理器链之后,您将拥有与之前解决方案中相同的对象。