2013-12-09 37 views
0

將SOAP消息從WSO2ESB通過另一個ESB轉發到後端Web服務似乎不可能,因爲原始wsa:To值被修改爲中間URL ESB。 下面的配置顯示了這種行爲:WSO2:地址端點似乎覆蓋了wsa:到WS-Addressing屬性

<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

您需要在wsa:ReplyTo標頭標籤中提供您的後端地址。所以你的中間人會繼續對後端服務的響應。

<header name="ReplyTo" value="http://ws.backend.com/service"/> 

更多信息:http://www.w3.org/Submission/ws-addressing/

+0

謝謝你的回答,但這不是我想達到的。 –

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> 

注意,您必須使用相同的值設置「操作」兩次。 另請注意,您可以使用'To'以不同的值,並使用'默認'端點而不是上面的'地址'端點。

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'。