【发布时间】:2015-06-10 11:31:59
【问题描述】:
我已从 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] 对象。使用新版本的代码,payload 是一个 org.glassfish.grizzly.utils.BufferInputStream 包含soap xml。
我可以使用 xpath 和 jaxb-xml-object-transformer 的组合将流的内容转换为响应对象,但这似乎是倒退。
我已经研究过在没有请求的情况下使用 jaxws-client 以及 ws-consumer,但我的以下要求似乎排除了这些选项(除非我只是误解了如何使用它们)。
- 我需要使用契约优先的方法来调用 Web 服务,请参阅上面我指定 serviceClass 而不是 wsdl 的地方。
- Web 服务使用基本身份验证,因此我需要指定用户名和密码。
- 我需要能够指定 Web 服务的主机和端口(或至少是地址)。
【问题讨论】:
-
我已经在forum.mulesoft.org/mulesoft/topics/…交叉发布了这个问题
-
你的问题是你的实现是否是最优化的?
-
@Sudarshan 我想进行 Web 服务调用并将有效负载作为响应对象,而不必自己编写大量样板代码来开始解析和反序列化 xml。如我的示例代码所示,当使用 http outbound-endpoint 和 cxf jaxws-client 时,这曾经是可以实现的。
-
我同意并且使用更新的连接器,您需要使用一个对象到 xml 转换器(您也提到了这一点)......所以您是在问这是否是唯一的做事方式? ...基本上你已经提到了一种可能的解决方案是不是
-
@Sudarshan 使用对象到 xml 转换器然后自己解析和反序列化对象的解决方案似乎是一个巨大的倒退,这就是为什么我希望有一个类似于“旧方式”的解决方案' 做不需要所有这些额外代码的事情。我必须编写的代码越多,我需要维护的代码就越多,而且它就越有可能包含错误。