2014-04-17 125 views
4

我與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> 

回答