2015-03-19 55 views
0

我有以下問題:WSO2ESB並行SOAP調用

開發一個基於WSDL的代理,在並行調用幾個不同的SOAP Web服務並返回響應:

<inSequence> 
<log level="full"/> 
<iterate xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:agg="http://www.test.ro/aggregate" 
    preservePayload="true" 
    attachPath="//soapenv:Body" 
    expression="//agg:AggregateRequest/agg:messageRequest"> 
    <target> 
     <sequence> 
      <property name="messageId" 
      expression="//soapenv:Body/agg:messageRequest/agg:messageId[node()]"/> 
      <property name="endpoint" 
      expression="//soapenv:Body/agg:messageRequest/agg:endpoint[node()]"/> 
      <xslt key="CleanPayload" source="/"/> 
      <send> 
       <endpoint key="MirrorEndpoint"/> 
      </send> 
     </sequence> 
    </target> 
</iterate> 
</inSequence> 

<outSequence> 
<property name="resp" scope="default"> 
    <agg:AggregateResponse xmlns:agg="http://www.test.ro/aggregate"/> 
</property> 
<aggregate> 
    <completeCondition timeout="10"> 
     <messageCount min="-1" max="-1"/> 
    </completeCondition> 
    <onComplete xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
     expression="$body/*" 
     enclosingElementProperty="resp"> 
     <log level="full"/> 
     <send/> 
    </onComplete> 
</aggregate> 
</outSequence> 

我的挑戰是:

  • 如何將messageId從inSequence傳遞到outSequence,以便我可以匹配對請求的響應(類似於Message Broker的本地環境)
  • 我怎麼設置從AGG文本端點關鍵:端點

我知道這可能是一個新手的問​​題,但我有一個困難時期關於這一主題找到好的教程。

謝謝

回答

1

當您設置屬性(範圍默認值)在序列中,您可以在排序中找到它的值。

將此屬性設置您在序列裏面:

<property name="IN_MESSAGE_ID" expression="get-property('MessageID')"/> 

您可以使用get-property('IN_MESSAGE_ID')在輸出序列

如果你想將消息發送到一個動態的地址,你可以設置頭「To」並使用發送中介:

<header name="To" expression="get-property('MY_DESTINATION')"/> 
<send/> 
+0

謝謝。幾分鐘前我得出了同樣的結論 – 2015-03-19 15:49:03

0

嘗試設置郵件ID作爲HTTP標頭屬性,

<header name="MessageId" value="0001" scope="transport"/> 

而在outSequence

<property name="MessageId" expression="get-property('MessageId')"/> 

我havnt測試了這一點檢索這個頭,所以給個反饋是否有效

+0

不幸的是,所做的只是將這些元素添加到SOAP標頭中。我需要將它們保存在wso2esb中,並在收到響應後回覆消息 – 2015-03-19 13:02:54