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