我已经从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,但是我的以下要求似乎将这些选项排除在外(除非我只是误解了如何使用它们)。
答案 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是拦截的,因此在处理器链之后,您将拥有与之前解决方案中相同的对象。