我與XML後端服務響應,我返回它在默認情況下。WSO2 ESB的JSON響應格式
如果客戶端給我添加參數(如:& outout_format = json),我需要在「outSequence」內部將響應轉換爲JSON。
例如:
<result>
<foo>bar</foo>
<foo2>bar2</foo2>
<nested>
<node>value</node>
</nested>
</result>
應該響應爲
{
"foo": "bar",
"foo2": "bar2",
"nested":{
"node":"value"
}
}
下面是測試代理服務(我只是在這裏使用inSequence中表現出的問題):
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="JSONtest"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<property name="TEST_WAITING_FOR"
value="json"
scope="default"
type="STRING"/>
<header name="To" action="remove"/>
<property name="RESPONSE" value="true"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<payloadFactory media-type="xml">
<format>
<response xmlns="">
<result>success</result>
<code>123</code>
</response>
</format>
<args/>
</payloadFactory>
<switch source="get-property('TEST_WAITING_FOR')">
<case regex="json">
<property name="messageType"
value="application/json"
scope="axis2"
type="STRING"/>
</case>
<default>
<property name="messageType" value="text/xml" scope="axis2" type="STRING"/>
</default>
</switch>
<send/>
</inSequence>
</target>
<description/>
RESP
它onses:
{"response":{"result":"success","code":123}}
有沒有什麼辦法刪除根節點「響應」,使其看起來像這樣?
{"result":"success","code":123}
當我嘗試刪除節點「結果」與富民介體(例如$體/結果/ * - > $體/ *)它成爲一個無效的XML與幾個根節點,和JSON只包含第一個。
我知道這是可能的有效載荷的JSON消息,但後臺可以返回不同的格式和不同數量的嵌套節點的XML,所以我不能硬編碼爲JSON。
看來,我需要實現我自己的JSONMessageFromatter? (任何的代碼示例?)
UPD:我找到了解決方案(感謝Dakshika)
<payloadFactory media-type="json">
<format>$1</format>
<args>
<arg expression="$.response" evaluator="json"></arg>
</args>
</payloadFactory>
謝謝你,你的鏈接幫助我 – mephist