2013-07-23 99 views
0

我有一個代理,它接收傳入的XML並對其執行xslt轉換以獲取所需的xml格式。 然後它應該作爲JSON發送到服務,所以我已經將messageType設置爲application/json,但是它以XML的形式到達。在wso2 ESB 4.6.0代理中將傳入XML轉換爲JSON

<proxy xmlns="http://ws.apache.org/ns/synapse" name="XSLTTRANSPROXY_BRYN" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <xslt key="gov:/Complete.xsl"> 
      <property xmlns:ns="http://org.apache.synapse/xsd" name="GUID" expression="fn:substring-after(get-property('MessageID'), 'urn:uuid:')"/> 
     </xslt> 
     <property name="messageType" value="application/json" scope="axis2"/> 
     <log level="full"/> 
     </inSequence> 
     <outSequence> 
     <send/> 
     </outSequence> 
     <endpoint> 
     <address uri="http://localhost:54150/"/> 
     </endpoint> 
    </target> 
    <description></description> 
</proxy> 

我已經嘗試了axis2.xml文件中的各種類型的構建器,但是沒有一個似乎改變了結果。 目前運行WSO2 ESB 4.6.0

回答

3

你的代碼應該是這樣的:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="XSLTTRANSPROXY_BRYN" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <xslt key="gov:/Complete.xsl"> 
      <property xmlns:ns="http://org.apache.synapse/xsd" name="GUID" expression="fn:substring-after(get-property('MessageID'), 'urn:uuid:')"/> 
     </xslt> 
     <property name="messageType" value="application/json" scope="axis2"/> 
     <log level="full"/> 
<send> 
<endpoint> 
     <address uri="http://localhost:54150/"/> 
     </endpoint> 
</send> 
     </inSequence> 
     <outSequence> 
     <send/> 
     </outSequence> 
     </target> 
    <description></description> 
</proxy> 

而且你不需要啓用這個文件中提到的標籤: - http://docs.wso2.org/wiki/display/ESB403/ESB+and+JSON。如果你沒有在json中獲取數據嘗試在其他瀏覽器中的服務

+0

我已經做了一個乾淨的安裝wso2esb 4.6,設置代理上面,確保axis2.xml同時包含messagebuilder和formatter,並把axis2 -json-1.6.2.jar和jettison-1.3.3.jar在lib文件夾中,但是內容類型仍然以application/xml的形式到達TCPMon。 有沒有一種方法可以確認格式化程序和構建程序是否可用? 它還能做什麼? –

+0

升級到ESB 4.7.0後,上面的工作。不確定爲什麼它在4.6.0中不起作用。 –

1

您的代理應該沒有問題的工作。當我們設置時,

<property name="messageType" value="application/json" scope="axis2"/> 

消息將通過消息格式化程序變成json。所以如果我們在發送前登錄,它仍然是xml格式。您可以使用像tcpmon這樣的工具查看轉換後的消息。

我測試了下面的示例,指向tcpmon。

<proxy name="TestProxy" 
      transports="https http" 
      startOnLoad="true" 
      trace="disable"> 
     <description/> 
     <target> 
     <endpoint> 
      <address uri="http://localhost:8888/"/> 
     </endpoint> 
     <inSequence> 
      <property name="messageType" value="application/json" scope="axis2"/> 
      <log level="full"/> 
     </inSequence> 
     <outSequence> 
      <send/> 
     </outSequence> 
     </target> 
    </proxy>