簡體   English   中英

JSON至SOAP WSO2 Api管理器xml序列

[英]JSON to SOAP WSO2 Api manager xml sequence

我將以REST(json)API的形式發布SOAP服務。 我要公開的服務操作在WSDL / XSD定義中具有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>

我不知道如何使用PayloadFactory將JSON數組映射到xml序列。 我發現的所有樣本都只處理簡單的json和SOAP消息,例如樣本WSO2轉換 我想轉換此json消息:

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

對於此肥皂消息:

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

您可以使用有效負載工廠中介程序來執行此操作。 它可用於在客戶端和后端服務器之間轉換或替換消息內容。 在您的情況下,您可以按以下方式配置代理服務。

<?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

如果您擁有非靜態有效負載(您的情況),那么payload-factory-mediator將不是解決方案(僅適用於靜態有效負載)。 解決問題的最佳方法是在WSO2 ESB中使用xslt中介程序+ Rich中介程序。 您可以嘗試以下示例, https://docs.wso2.com/display/ESB481/Sample+440%3A+Converting+JSON+to+XML+Using+XSLT

或者,您可以使用腳本介體,以防萬一,如本示例所述。 https://docs.wso2.com/display/ESB481/Sample+350%3A+Introduction+to+the+Script+Mediator+Using+JavaScript 但這不是最喜歡的方式。

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

請嘗試下面提到的步驟

將具有斷言的SoapUI中的SOAP測試服務轉換為具有斷言的JSON服務的步驟

  1. 復制SOAP UI項目的項目xml文件
  2. 打開復制的xml文件
  3. 在JSON中找到與SOAP調用斷言相同的所有斷言類型的格式
  4. 現在將測試步驟節點的config節點中的所有soap斷言轉換為上一步中找到的JSON斷言配置節點格式
  5. 通過更改以下所有字段,將SOAP調用請求轉換為JSON調用•添加output_format節點•添加Rest調用–服務名稱•刪除無值的節點並將其他節點轉換為JSON格式,例如{“ node name”:“ value ”}等,
  6. 在測試步驟節點類型屬性中-將是“ request”,將其更改為“ httprequest”
  7. 保存文件並在SOAP UI中打開

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

也請參閱該鏈接 ,這有助於轉換的要求完全包括斷言

如果沒有幫助,請回復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM