2013-02-28 69 views
0

我們試圖在WSO2 ESB上實現基本的SOAP-to-REST代理服務。在我們的例子「16783484」 -WSO2 esb:如何使用數字操作名稱代理REST服務

http://<MYURL>/simpleQuery/16783484?oslc.select=value1 

的問題是,操作名稱具有數字僅格式:我們的第三方REST服務接受以下格式的要求。 payloadFactory中介不允許將XML元素作爲XML元素,因爲XML規範限制僅限數字的元素名稱。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <payloadFactory> 
      <format> 
       <16783484> 
        <oslc.select>$1</oslc.select> 
       </16783484> 
      </format> 
      <args> 
       <arg value="myvalue1"/> 
      </args> 
     </payloadFactory> 
     <send> 
      <endpoint> 
       <address uri="http://<MYURL>/simpleQuery" format="get"/> 
      </endpoint> 
     </send> 
     <drop/> 
     </inSequence> 
     <outSequence> 
     <log level="full"/> 
     <send/> 
     </outSequence> 
    </target> 
</proxy> 

這怎麼能克服?

感謝您的幫助!

回答

2

WSO2支持團隊提出了以下解決方案。謝謝Sandapa!

在這種情況下,您必須將終端格式設置爲'休息'。如果是GET請求,則必須將GET_METHOD設置爲GET。請參考下面的例子。

實施例:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <property name="REST_URL_POSTFIX" value="/getSimpleQuote?symbol=IBM" scope="axis2" type="STRING"/> 
     <property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/> 
     <send> 
      <endpoint> 
       <address uri="http://localhost:9000/services/SimpleStockQuoteService/" format="rest"/> 
      </endpoint> 
     </send> 
     <drop/> 
     </inSequence> 
     <outSequence> 
     <log level="full"/> 
     <send/> 
     </outSequence> 
    </target> 
    <description></description> 
</proxy> 
+0

我想知道爲什麼這不被標記爲正確的答案。我試過這個,這是正確的。 – 2013-04-16 13:57:35

0

儘管這個評論並不會給你一個解決方案,但我可以說這是一個壞主意:-)你可以嘗試使用XSLT而不是PayloadFactory來進行轉換,但是可能會再次阻塞XML解析器。問題在於很多WSO2產品使用的開源項目/庫,您可能會碰到其他地方會遵守這些規範。從長遠來看,遵守規範將使您在與其他外部工具/系統集成時更輕鬆。是否可以更改您的休息服務,以便服務名稱前面至少有下劃線?

+0

XSLT介體將具有同樣的問題Chintana。不幸的是,我不能改變REST API,因爲它是COTS產品的一部分。但據我所知,REST規範不需要操作名稱來遵循任何標準,對嗎? WSO2 ESB是否允許通過將操作名稱硬編碼到端點URL並刪除SOAP消息內容來重定向到REST服務?這是Mule ESB使用的方法。 – 2013-03-01 15:26:56