WSO2 ESB版本4.7.0,简单的JSON到XML转换问题

时间:2013-09-07 21:39:09

标签: xml json wso2 wso2esb wso2carbon

我正在尝试熟悉WSO2 ESB 4.7.0。作为简单的测试,我想使用代理服务将JSON转换为XML。现在我已经理解ESB隐式地将JSON转换为XML。我创建了一个简单的中介,目标是将转换后的XML消息写入文件。不幸的是,JSON到XML转换的结果是空的(文件中没有数据)。我是否理解WSO2的JSON功能有什么问题,或者我的调解有什么问题?

我的调解:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="MockJsonTest" transports="http https" startOnLoad="true" trace="disable">
<target>
    <inSequence>
        <property name="messageType" value="text/xml" scope="axis2" type="STRING"/>
        <property name="ContentType" value="text/xml" scope="axis2" type="STRING"/>
        <log level="full"/>
        <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
        <property name="transport.vfs.ReplyFileName" value="filename.xml" scope="transport" type="STRING"/>
        <send>
            <endpoint>
                <address uri="vfs:file:///C:/wso2">
                    <timeout>
                        <duration>0</duration>
                        <responseAction>discard</responseAction>
                    </timeout>
                </address>
            </endpoint>
        </send>
    </inSequence>
    <outSequence/>
    <faultSequence/>
</target>

我的curl客户端发布了JSON数据:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"kind":"plus#person"}' http://mycomputer:8280/services/MockJsonTest

在axis2.xml中,我尝试过两种JSON格式化程序:

    <!--messageFormatter contentType="application/json"
                      class="org.apache.axis2.json.JSONMessageFormatter"/-->
    <messageFormatter contentType="application/json"
                      class="org.apache.axis2.json.JSONStreamFormatter"/>

亲切的问候,

的Heiko

1 个答案:

答案 0 :(得分:1)

我测试了你的场景,我得到了正确的输出,如下所示。

<kind>plus#person</kind>

以下是我的代理服务。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="MockJsonTest"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="messageType" value="text/xml" scope="axis2" type="STRING"/>
         <property name="ContentType" value="text/xml" scope="axis2" type="STRING"/>
         <log level="full"/>
         <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
         <property name="transport.vfs.ReplyFileName"
                   value="filename.xml"
                   scope="transport"
                   type="STRING"/>
         <send>
            <endpoint>
               <address uri="vfs:file:///home/user/test">
                  <timeout>
                     <duration>30000</duration>
                     <responseAction>discard</responseAction>
                  </timeout>
               </address>
            </endpoint>
         </send>
      </inSequence>
   </target>
   <description/>
</proxy>

您的代理服务中似乎存在一些小的xml格式错误。将其与上述进行比较。在源视图中指定代理时,请始终单击末尾的“切换到设计视图”。然后,如果有任何格式错误,它会提醒您。

我使用了你提供的相同curl命令。我在axis2.xml中有ESB 4.7.0的默认JSON消息格式化程序和构建器,如下所示。

<!--JSONBuilder Message Formatters-->
        <messageFormatter contentType="application/json"
                          class="org.apache.axis2.json.JSONMessageFormatter"/>
        <!--messageFormatter contentType="application/json"
                          class="org.apache.axis2.json.JSONStreamFormatter"/-->
        <messageFormatter contentType="application/json/badgerfish"
                          class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/>
        <messageFormatter contentType="text/javascript"
                          class="org.apache.axis2.json.JSONMessageFormatter"/>