2016-05-12 65 views
0

我想將SOAP服務作爲REST(json)API發佈。該服務操作我要揭露有一個XML序列元素在WSDL/XSD定義:JSON to SOAP WSO2 Api manager xml序列

<xs:complexType name="hellolist"> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="hellolistResponse"> 
    <xs:sequence> 
     <xs:element name="return" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 

我不知道如何映射JSON數組使用PayloadFactory一個XML序列。我找到的所有示例僅處理簡單的json和SOAP消息,如sample WSO2 transformation。 我想改變這個JSON消息:

{"hellolist":{"name":["Peter","Mary","Ann","James"]}} 

爲了這個SOAP消息:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:dum="http://dummyservice2.com/"> 
    <soapenv:Header/> 
     <soapenv:Body> 
     <dum:hellolist> 
      <name>Peter</name> 
      <name>Mary</name> 
      <name>Ann</name> 
      <name>James</name> 
     </dum:hellolist> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

你stucked與映射JSON數組到SOAP?這就是全部? –

+1

是的,問題是每個請求中JSON數組的長度都不相同。 –

回答

0

您可以使用有效載荷工廠調解員做到這一點。它可以用來轉換或替換客戶端和後端服務器之間的消息內容。在你的情況下,你可以配置一個代理服務如下。

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="json_to_xml_factory" 
     transports="https,http" 
     statistics="disable" 
     trace="disable" 
     startOnLoad="true"> 
    <target> 
     <inSequence> 
     <payloadFactory media-type="xml"> 
      <format> 
       <dum:hellolist xmlns:dum="http://dummyservice2.com/"> 
        <name xmlns="">$1</name> 
        <name xmlns="">$2</name> 
        <name xmlns="">$3</name> 
        <name xmlns="">$4</name> 
       </dum:hellolist> 
      </format> 
      <args> 
       <arg evaluator="json" expression="$.hellolist.name[0]"/> 
       <arg evaluator="json" expression="$.hellolist.name[1]"/> 
       <arg evaluator="json" expression="$.hellolist.name[2]"/> 
       <arg evaluator="json" expression="$.hellolist.name[3]"/> 
      </args> 
     </payloadFactory> 
     <log level="full"/> 
     </inSequence> 
     <outSequence/> 
    </target> 
    <description/> 
</proxy> 

請參考下面的鏈接瞭解更多信息。

https://docs.wso2.com/display/ESB490/PayloadFactory+Mediator http://christinetechtips.blogspot.com/2014/02/payload-factory-mediators-to-work-with.html http://madhukaudantha.blogspot.com/2013/05/wso2-esb-payload-mediator-tutorial.html

+0

謝謝,但您的方法並不能解決問題。的列表的長度是可變的,在一個請求中的長度可以有4種元素和下一個請求8. ' ' –

0

如果你有一個非靜態有效載荷(你的情況),有效載荷工廠調解員將不(僅適用於靜態有效載荷)的解決方案。解決您的問題的最佳方式是在WSO2 ESB中使用xslt mediator +增強介體。你可以試試這個例子,https://docs.wso2.com/display/ESB481/Sample+440%3A+Converting+JSON+to+XML+Using+XSLT

或者你可以使用script mediator以防萬一,如本例所述。 https://docs.wso2.com/display/ESB481/Sample+350%3A+Introduction+to+the+Script+Mediator+Using+JavaScript。但不是最優先的方式。

我已經使用WSO2 ESB完成了您的轉換類型,如上所述。但我不知道這些介體工具是否也可用於WSO2 APIM(當我爲您的問題搜索時,找不到任何示例)。

0

嘗試的步驟提及以下

步驟在了SoapUI與斷言轉換一個SOAP測試服務成JSON服務與斷言

  1. 複製SOAP UI項目的項目XML文件
  2. 打開復制xml文件
  3. 在SOAP調用斷言中查找JSON中所有斷言類型的格式
  4. 現在將所有soap斷言將測試步驟節點的配置節點設置爲JSON斷言配置節點格式,如上一步
  5. 通過更改所有字段,將SOAP調用請求轉換爲JSON調用 •添加output_format節點 •添加Rest調用 - 服務名稱 •刪除沒有值的節點,並將其他節點轉換爲JSON格式,如{「node name」:「value」}等,
  6. 在測試步驟節點類型屬性 - 這將是「請求」更改爲「HttpRequest的」
  7. 保存文件並在SOAP UI打開

現在你可以看到所有的服務新打開的項目將採用JSON格式,並且之前在SOAP調用中的所有斷言都將可用。

也提到了link這有助於轉換的要求完全包括斷言

請回復,如果它是沒有幫助的

+0

歡迎來到Stack Overflow!但請注意[不允許公開自我推銷](http://stackoverflow.com/help/behavior)。 –

+0

感謝您的評論! –

+0

對不起,但這個問題是關於WSO2 Api管理工具的。 –