wso2esb 4.9.0中的ResponseJson采用标记格式

wso2esb 4.9.0中的ResponseJson采用标记格式,wso2,axis2,wso2esb,wso2carbon,wso2dss,Wso2,Axis2,Wso2esb,Wso2carbon,Wso2dss,我正在使用wso2esb 4.9.0和WSO2DS3.0.0 我有一个简单的选择服务,如下所示 <proxy xmlns="http://ws.apache.org/ns/synapse" name="Simpleselect" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> <target

我正在使用wso2esb 4.9.0和WSO2DS3.0.0

我有一个简单的选择服务,如下所示

<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="Simpleselect"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="messagetype"
                   value="application/json"
                   scope="axis2"
                   type="STRING"/>
         <property name="usercode"
                   expression="//usercode/text()"
                   scope="default"
                   type="STRING"/>
         <payloadFactory media-type="xml">
            <format>
               <p:username_op xmlns:p="http://ws.wso2.org/dataservice">
                  <p:usercode>$1</p:usercode>
               </p:username_op>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('usercode')"/>
            </args>
         </payloadFactory>
         <send receive="simpletest">
            <endpoint>
               <address uri="http://localhost:9764/services/muser_DataService/"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <description/>
</proxy>
axix2.xml中的消息格式化程序和构建器是

<messageFormatter contentType="application/json"
                          class="org.apache.synapse.commons.json.JsonStreamFormatter"/>
<messageBuilder contentType="application/json"
                        class="org.apache.synapse.commons.json.JsonStreamBuilder"/>

日志:

[2015-09-15 10:44:02979]信息-日志调解人发送至:http://www.w3.org/2005/08/addressing/anonymous,WSAction:,SOAPAction:,MessageID:urn:uuid:942e22525-29f7-4ef6-b64f-709ea41f4bbf,方向:响应,信封:2127629166052452其他地点460077453499443青年科技私人有限公司-1无-189999999-11187416899913503vikash@myunisoft.com2545910581364239DBPB0012534954639984412DBPRTY0012538210579514587DBORG001254009312244657412094496556660771187416899913503vikash@myunisoft.com

请检查下面的代码。我向我的代理发送一个XML输入,代理与某个目标系统连接,接收XML响应,并以JSON格式向客户端提供响应

代理代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="StackOverflow_Proxy"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="usercode"
                   expression="//usercode/text()"
                   scope="default"
                   type="STRING"/>
         <payloadFactory media-type="xml">
            <format>
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                                 xmlns:dat="http://ws.wso2.org/dataservice">
                  <soapenv:Header/>
                  <soapenv:Body>
                     <dat:getChainInfo>
                        <dat:usercode>$1</dat:usercode>
                     </dat:getChainInfo>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('usercode')"/>
            </args>
         </payloadFactory>
         <header name="Action" scope="default" value="urn:getChainInfo"/>
         <log level="full">
            <property name="============= REQUEST ============" expression="$body"/>
         </log>
         <send receive="simpleTest">
            <endpoint>
               <address uri="http://localhost:8001/services/DataService_Proxy"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence/>
   </target>
   <description/>
</proxy>
    <?xml version="1.0" encoding="UTF-8"?>
<sequence name="simpleTest" xmlns="http://ws.apache.org/ns/synapse">
    <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
    <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/>
    <log>
        <property expression="$body"
            name="============ RESPONSE =================" xmlns:ns="http://org.apache.synapse/xsd"/>
    </log>
    <property name="HTTP_METHOD" scope="axis2" value="POST"/>
    <property name="RESPONSE" scope="default" type="STRING" value="true"/>
    <property
        expression="$body/*[local-name() = 'ChainDesc']"
        name="responseDocument" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
    <payloadFactory media-type="json">
        <format>{
  "ResponseJSON": {
    "Body": "$1",
    "Status": "200",
    "Total": "1.0"
  }
}</format>
        <args>
            <arg evaluator="xml"
                expression="get-property('responseDocument')" xmlns:ns="http://org.apache.synapse/xsd"/>
        </args>
    </payloadFactory>
    <send/>
</sequence>

希望这会有帮助。谢谢

请检查下面的代码。我向我的代理发送一个XML输入,代理与某个目标系统连接,接收XML响应,并以JSON格式向客户端提供响应

代理代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="StackOverflow_Proxy"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="usercode"
                   expression="//usercode/text()"
                   scope="default"
                   type="STRING"/>
         <payloadFactory media-type="xml">
            <format>
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                                 xmlns:dat="http://ws.wso2.org/dataservice">
                  <soapenv:Header/>
                  <soapenv:Body>
                     <dat:getChainInfo>
                        <dat:usercode>$1</dat:usercode>
                     </dat:getChainInfo>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('usercode')"/>
            </args>
         </payloadFactory>
         <header name="Action" scope="default" value="urn:getChainInfo"/>
         <log level="full">
            <property name="============= REQUEST ============" expression="$body"/>
         </log>
         <send receive="simpleTest">
            <endpoint>
               <address uri="http://localhost:8001/services/DataService_Proxy"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence/>
   </target>
   <description/>
</proxy>
    <?xml version="1.0" encoding="UTF-8"?>
<sequence name="simpleTest" xmlns="http://ws.apache.org/ns/synapse">
    <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
    <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/>
    <log>
        <property expression="$body"
            name="============ RESPONSE =================" xmlns:ns="http://org.apache.synapse/xsd"/>
    </log>
    <property name="HTTP_METHOD" scope="axis2" value="POST"/>
    <property name="RESPONSE" scope="default" type="STRING" value="true"/>
    <property
        expression="$body/*[local-name() = 'ChainDesc']"
        name="responseDocument" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
    <payloadFactory media-type="json">
        <format>{
  "ResponseJSON": {
    "Body": "$1",
    "Status": "200",
    "Total": "1.0"
  }
}</format>
        <args>
            <arg evaluator="xml"
                expression="get-property('responseDocument')" xmlns:ns="http://org.apache.synapse/xsd"/>
        </args>
    </payloadFactory>
    <send/>
</sequence>
希望这会有帮助。谢谢

如果要更改传出消息的有效负载类型,例如将其更改为JSON,请在
之后添加messageType属性

。。。

希望这会有帮助

如果要更改传出消息的有效负载类型,例如将其更改为JSON,请在
之后添加messageType属性

。。。

希望这会有帮助

您使用的是
,因此它将仅返回XML格式的输出。如果需要json格式,则将有效负载工厂更改为

<payloadFactory media-type="json">
    <format>{
  "ResponseJSON": {
"Body": "$1",
"Status": "200",
"Total": "$2"
 }
}</format>
    <args>
        <arg evaluator="xml" expression="get-property('Datalist')"/>
        <arg evaluator="xml" expression="get-property('Total')"/>
    </args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
<send/> 

{
“ResponseJSON”:{
“正文”:“$1”,
“状态”:“200”,
“总计”:“$2”
}
}
希望这有帮助

您使用的是
,因此它将仅返回XML格式的输出。如果需要json格式,则将有效负载工厂更改为

<payloadFactory media-type="json">
    <format>{
  "ResponseJSON": {
"Body": "$1",
"Status": "200",
"Total": "$2"
 }
}</format>
    <args>
        <arg evaluator="xml" expression="get-property('Datalist')"/>
        <arg evaluator="xml" expression="get-property('Total')"/>
    </args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
<send/> 

{
“ResponseJSON”:{
“正文”:“$1”,
“状态”:“200”,
“总计”:“$2”
}
}

希望这有帮助

首先,将日志中介器置于接收序列中,并检查由输出序列实际处理的响应的日志。第二,打开browser developer控制台,检查Request的Content Type header的值。另一种情况是示例u中的“messagetype”与文档中的“messagetype”不同。Java lang case sensitiveI已经放置了log mediatro,并按照u所说做了一些更改,但我得到了相同的标记格式响应我认为这是asis2.xml中messagebuilder未将soap消息转换为有效负载中介中的JSONresponse的原因,我已经检查了PayloadMediator的源代码,它似乎根据提供的媒体类型设置了messageType属性。在发送回复消息之前,您是否尝试将中介移动到?首先,将日志中介置于接收序列中,并检查日志,该响应实际上是按out序列处理的。第二,打开browser developer控制台,检查Request的Content Type header的值。另一种情况是示例u中的“messagetype”与文档中的“messagetype”不同。Java lang case sensitiveI已经放置了log mediatro,并按照u所说做了一些更改,但我得到了相同的标记格式响应我认为这是asis2.xml中messagebuilder未将soap消息转换为有效负载中介中的JSONresponse的原因,我已经检查了PayloadMediator的源代码,它似乎根据提供的媒体类型设置了messageType属性。您是否尝试在发送回复消息之前将中介移动到?我在wso2esb 4.9.0版本中工作,我尝试过此操作,它也以标记格式返回我。它在wso2esb 4.8.1上运行良好。刚刚下载wso2esb 4.9.0,并且面临相同的问题。我想我们已经找到了解决办法。只需将媒体类型设置为“json”,并将json主体放入有效负载工厂。我正在传递一个XML作为参数,正如您所做的那样,ESB正在将该XML转换为JSON,并以所需的格式给出响应。我也更新了我的答案。是的,事实上我已经尝试过将此媒体类型作为“JSON”,响应是我所期望的,但实际上我正在尝试使用媒体类型xml来实现这一点。它在所有以前的版本中都有效,但在4.9.0中不起作用。不知道为什么。我在wso2esb 4.9.0版本中工作,我尝试过这个,它也以标签格式返回给我。它在wso2esb 4.8.1上运行良好。刚刚下载wso2esb 4.9.0,面临同样的问题。我想我们已经找到了解决办法。只需将媒体类型设置为“json”,并将json主体放入有效负载工厂。我正在传递一个XML作为参数,正如您所做的那样,ESB正在将该XML转换为JSON,并以所需的格式给出响应。我也更新了我的答案。是的,实际上我已经尝试过将这种媒体类型作为“JSON”,响应是我所期望的,但实际上我正在尝试使用媒体类型xml实现这一点,它在所有以前的版本中都有效,但在4.9.0中不起作用。不知道为什么。
<messageFormatter contentType="application/json"
                          class="org.apache.synapse.commons.json.JsonStreamFormatter"/>

<messageFormatter contentType="application/json/badgerfish"
                          class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/>

<messageBuilder contentType="application/json"
                        class="org.apache.synapse.commons.json.JsonStreamBuilder"/>

<messageBuilder contentType="application/json/badgerfish"
                        class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/>
    {
  "ResponseJSON": {
    "Body": "{"ChainDesc":{"O_text":4,"O_status":6,"O_msg":"SuccessFul"}}",
    "Status": "200",
    "Total": "1.0"
  }
}
...
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
<payloadFactory media-type="json">
    <format>{
  "ResponseJSON": {
"Body": "$1",
"Status": "200",
"Total": "$2"
 }
}</format>
    <args>
        <arg evaluator="xml" expression="get-property('Datalist')"/>
        <arg evaluator="xml" expression="get-property('Total')"/>
    </args>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"/>
<send/>