【发布时间】:2014-03-23 01:58:28
【问题描述】:
我正在将构建为在 WSO2 ESB 4.0 上运行的服务迁移到 WSO2 ESB 4.7 并遇到问题。我要迁移的服务是具有 SOAP 1.2 绑定接口的自定义代理。此代理对基于 SOAP 1.1 的服务进行出站调用。
ESB 4.0 服务器正在使用 Http NIO 传输,并且在将响应消息发送回客户。
ESB 4.7 使用的是 Http PassThrough 传输,它不具备 SOAP 消息转换能力,因此必须手动依次更改 SOAP 信封命名空间和 HTTP 标头信息。
是否可以将 Http PassThrough 和 Http NIO 配置为在同一个 ESB 上处于活动状态,并将各个服务配置为使用其中之一?我已经尝试过,但没有成功,到目前为止,我的研究似乎表明了其中之一。
EDIT1 - 对 RaviU 的回应:
感谢拉维。如果将 ESB 4.7.0 配置为使用 HTTP NIO 传输,则 ESB 4.7.0 将支持 SOAP 1.1 到 1.2 的自动转换。换句话说,它的行为类似于 ESB 4.0 服务器。当 ESB 4.7.0 配置为使用 HttpPassThrough 传输时,似乎不会发生 SOAP 1.1 到 1.2 的自动转换。这是有道理的,因为该传输不关心内容类型。使用 HttpPassThrough 时遇到的问题是我必须手动将 SOAP 信封更改为 1.2 并在发送回客户端之前设置适当的 http 标头。这是因为它们在服务调用 SOAP 1.1 服务时发生了变化。如果我使用 HTTP NIO 传输,手动步骤由 ESB 自动处理。我假设这是在消息返回给客户端之前由消息格式化程序完成的。
【问题讨论】:
-
你不能有两个不同的 HTTP 传输 -axis2 使用协议前缀来标识要使用的传输 - 由于这个原因,你不能有两个不同的名为“http”的传输。您说 ESB 4.7.0 没有能力在 SOAP 1.1 之间转换消息。和1.2?我不确定您的意思是什么,因为 WSO2 ESB 支持两个版本的 SOAP。您是否遇到了特定问题?
-
RaviU,我已经编辑了我的帖子来回答你的问题。
-
嗨,克里斯,我有点晚才回复你,很抱歉!我现在明白你的问题了。它不使用直通传输自动执行此转换的原因是选择性构建机制(即,它根据使用的中介决定是否从缓冲区构建消息)。为了解决这个问题,您可以在 inSequence 中通过 xPath 检测传入的 SOAP 版本,并将其存储在一个属性中,然后您可以在 outSequence 中使用该属性来决定用于为您进行转换的 messageType。