1

我正在尝试熟悉 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"/>

亲切的问候,

平子

4

1 回答 1

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"/>
于 2013-09-09T06:59:44.697 回答