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