簡體   English   中英

在Wso2中將XML轉換為JSON

[英]Transforming XML to JSON in Wso2

我正在嘗試使用WSO2代理服務將XML有效負載轉換為JSON格式,作為其中的一部分,我做了以下工作,但是我無法接收到JSON格式的響應。

我從位置wso2esb-4.9.0\\repository\\conf\\axis2 axis2.xml和axis2_blocking_client.xml的以下消息生成器和格式化程序中刪除了注釋

messageBuilder contentType="application/json"
class="org.apache.synapse.commons.json.JsonStreamBuilder"

messageFormatter contentType="application/json"
class="org.apache.synapse.commons.json.JsonStreamFormatter"

我的代理人是

<?xml version="1.0" encoding="UTF-8"?>

<proxy xmlns="http://ws.apache.org/ns/synapse"
   name="TestXML_To_JSON"
   transports="http,https"
   statistics="disable"
   trace="disable"
   startOnLoad="true">

   <target>

  <inSequence>
     <header name="To" action="remove"/>
     <property name="RESPONSE" value="true"/>
     <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
     <payloadFactory media-type="xml">
        <format>
           <person>
              <fullName>
                 <firstName>Laks</firstName>
                 <lastName>M</lastName>
              </fullName>
              <birthDate>
                 <month>May</month>
                 <date>31</date>
                 <year>2015</year>
              </birthDate>
              <address>
                 <street>test1</street>
                 <province>test2</province>
                 <city>Colombo</city>
                 <country>test3</country>
                 <postalCode>0002</postalCode>
              </address>
           </person>
        </format>
        <args/>
     </payloadFactory>
     <property name="messageType"
               value="application/json"
               scope="axis2"
               type="STRING"/>
     <send/>
  </inSequence>

我將屬性messageType設置為application / json時,期望以JSON格式將響應作為鍵值對。但是當我測試此Proxy時,它的輸出如下所示:JSONObject

             <jsonObject>
               <person>
              <fullName>
                 <firstName>Laks</firstName>
                 <lastName>M</lastName>
              </fullName>
              <birthDate>
                 <month>May</month>
                 <date>31</date>
                 <year>2015</year>
              </birthDate>
              <address>
                 <street>test1</street>
                 <province>test2</province>
                 <city>Colombo</city>
                 <country>test3</country>
                 <postalCode>0002</postalCode>
              </address>
           </person>
           </jsonObject>

請幫助我如何配置代理或消息構建器和格式化程序,以將響應作為實際JSON格式作為鍵值對進行獲取。

謝謝,拉克希米

我檢查了您的配置,看來它可以正常工作。 以下是遵循的步驟。

1)在axis2.xml中啟用了按格式檢查的天氣。

<messageFormatter contentType="application/json"
                      class="org.apache.synapse.commons.json.JsonStreamFormatter"/>

2)通過取消注釋repository / conf文件夾中可用的log4j.properties文件中的以下行來啟用連線日志。

log4j.logger.org.apache.synapse.transport.http.wire=DEBUG

3)以下是我使用的示例代理配置,與您的配置類似,但我包括用於發送消息的地址端點。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="TestXML_To_JSON"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <header name="To" action="remove"/>
         <property name="RESPONSE" value="true"/>
         <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
         <payloadFactory media-type="xml">
            <format>
               <person>
                  <fullName>
                     <firstName>Laks</firstName>
                     <lastName>M</lastName>
                  </fullName>
                  <birthDate>
                     <month>May</month>
                     <date>31</date>
                     <year>2015</year>
                  </birthDate>
                  <address>
                     <street>test1</street>
                     <province>test2</province>
                     <city>Colombo</city>
                     <country>test3</country>
                     <postalCode>0002</postalCode>
                  </address>
               </person>
            </format>
            <args/>
         </payloadFactory>
         <property name="messageType"
                   value="application/json"
                   scope="axis2"
                   type="STRING"/>
         <send>
            <endpoint>
               <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
         </send>
      </inSequence>
   </target>
   <description/>
</proxy>

4)使用SoapUI調用了代理服務5)在可見的日志之后,該日志顯示消息以json格式發送。

[2016-01-05 16:38:30,351] DEBUG - wire << "[\r][\n]"
[2016-01-05 16:38:30,352] DEBUG - wire << "d4[\r][\n]"
[2016-01-05 16:38:30,352] DEBUG - wire << "{"person":{"fullName":{"firstName":"Laks","lastName":"M"},"birthDate":{"month":"May","date":31,"year":2015},"address":{"street":"test1","province":"test2","city":"Colombo","country":"test3","postalCode":"0002"}}}[\r][\n]"

希望這會幫助你。

您需要在repository / conf / axis2文件中啟用application / json格式化程序,如下所示

<messageFormatter contentType="application/json" class="org.apache.synapse.commons.json.JsonStreamFormatter"/> 

然后將以下屬性添加到您的syanpse配置(proxy,api)

<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>

暫無
暫無

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

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