将WSO2ESB中的SOAP消息通过另一个ESB转发到后端Web服务似乎不可能,因为原始wsa:To
值被修改为中间ESB的URL。
以下配置显示了此行为:
<header name="To" value="http://ws.backend.com/service"/>
<property name="PRESERVE_WS_ADDRESSING" value="true"/>
<send>
<endpoint name="IntermediateESB">
<address uri="http://esb.intermediate.com/proxy">
<enableAddressing/>
</address>
</endpoint>
</send>
SOAP标头现在包含以下wsa:To
:
<wsa:To>http://esb.intermediate.com/proxy</wsa:To>
address uri
似乎会覆盖原来的wsa:To
值。
这将在中间ESB中失败,因为它需要wsa:To
中后端Web服务的URL。
SOAP标头应包含以下内容,以使中间ESB正常工作:
<wsa:To>http://ws.backend.com/service</wsa:To>
有哪些配置可以解决此问题?
答案 0 :(得分:0)
您需要在wsa:ReplyTo标头标记中提供您的后端地址。因此,您的中间人将继续响应后端服务。
<header name="ReplyTo" value="http://ws.backend.com/service"/>
答案 1 :(得分:0)
解决方案是您必须自己明确构建WS-Addressing标头,而不是使用<enableAddressing/>
!
示例:
<header xmlns:wsa="http://www.w3.org/2005/08/addressing" name="wsa:To" value="http://ws.backend.com/service"/>
<header xmlns:wsa="http://www.w3.org/2005/08/addressing" name="wsa:MessageID" expression="get-property('MessageID')"/>
<header xmlns:wsa="http://www.w3.org/2005/08/addressing" name="wsa:Action" value="http://ws.backend.com/operation"/>
<header name="To" value="http://esb.intermediate.com/proxy"/>
<header name="Action" value="http://ws.backend.com/operation"/>
<property name="PRESERVE_WS_ADDRESSING" value="true" scope="default" type="STRING"/>
<send>
<endpoint name="IntermediateESB">
<address uri="http://esb.intermediate.com/proxy"/>
</endpoint>
</send>
请注意,您必须使用相同的值设置“操作”两次。 另请注意,您可以使用具有不同值的“收件人”,并使用“默认”端点而不是上面的“地址”端点。
SOAP消息发布到“http://esb.intermediate.com/proxy”,WS-Addressing标头是:
<wsa:To xmlns:wsa="http://www.w3.org/2005/08/addressing">http://ws.backend.com/service</wsa:To>
<wsa:MessageID xmlns:wsa="http://www.w3.org/2005/08/addressing">urn:uuid:52aad1f4-9295-43f6-90c0-304e87922c27</wsa:MessageID>
<wsa:Action xmlns:wsa="http://www.w3.org/2005/08/addressing">http://ws.backend.com/operation</wsa:Action>
'IntermediateESB'现在可以将此SOAP消息转发给“http://ws.backend.com/service”。