[英]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.