wso2esb 4.9.0中的ResponseJson采用标记格式
我正在使用wso2esb 4.9.0和WSO2DS3.0.0 我有一个简单的选择服务,如下所示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
<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/>