【发布时间】:2016-01-07 15:31:55
【问题描述】:
我正在使用 wso2esb 4.9.0 和 Wso2dss3.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>
顺序:
<sequence name="simpletest" xmlns="http://ws.apache.org/ns/synapse">
<property name="messageType" scope="axis2" value="application/json"/>
<property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/>
<property name="HTTP_METHOD" scope="axis2" value="POST"/>
<property expression="//s:Datalist" name="Datalist" scope="default"
type="STRING" xmlns:ns="http://org.apache.synapse/xsd"
xmlns:ns3="http://org.apache.synapse/xsd" xmlns:s="http://ws.wso2.org/dataservice"/>
<property expression="count(//s:Datalist)" name="Total"
scope="default" type="STRING"
xmlns:ns="http://org.apache.synapse/xsd"
xmlns:ns3="http://org.apache.synapse/xsd" xmlns:s="http://ws.wso2.org/dataservice"/>
<filter xmlns:ns="http://org.apache.synapse/xsd"
xmlns:ns3="http://org.apache.synapse/xsd" xpath="get-property('Total')='0.0'">
<then>
<property name="RESPONSE" scope="default" type="STRING" value="true"/>
<payloadFactory media-type="xml">
<format>
<ResponseJSON xmlns="">
<Body>
<Datalist>Not Found</Datalist>
</Body>
<Status>404</Status>
</ResponseJSON>
</format>
</payloadFactory>
<send/>
</then>
<else>
<property name="RESPONSE" scope="default" type="STRING" value="true"/>
<property action="remove" name="NO_ENTITY_BODY" scope="axis2"/>
<payloadFactory media-type="xml">
<format>
<ResponseJSON xmlns="">
<Body>$1</Body>
<Status>200</Status>
<Total>$2</Total>
</ResponseJSON>
</format>
<args>
<arg evaluator="xml" expression="get-property('Datalist')"/>
<arg evaluator="xml" expression="get-property('Total')"/>
</args>
</payloadFactory>
<send/>
</else>
</filter>
</sequence>
当我使用 CURL 调用此服务时,它会以标签的形式给我一个响应,如图所示
<ResponseJSON><Body><Datalist xmlns="http://ws.wso2.org/dataservice"><userid>-1899999899</userid><username>Vikash Sinha</username><usercode>vikash</usercode></Datalist></Body><Status>200</Status><Total>1.0</Total></ResponseJSON>
我期待 {} 形式的结果
{"ResponseJSON":{"Body":{"Datalist":parameters},"Status":"200","Total":"1.0"}}
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:02,979] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:942e2525-29f7-4ef6-b64f-709ea41f4bbf, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><DataCollection xmlns="http://ws.wso2.org/dataservice"><Datalist><partybranchid>2127629166052452</partybranchid><partybranchname>other locations</partybranchname><partyid>460077453499443</partyid><partyname>Youtility Technologies Pvt Ltd</partyname><ouid>-1</ouid><organizationunitname>NONE</organizationunitname><inchargeid>-1899999899</inchargeid><sbuheadid>-1</sbuheadid><usercriteriaconfigid>1187416899913503</usercriteriaconfigid><primarymail>vikash@myunisoft.com</primarymail></Datalist><Datalist><partybranchid>2545910581364239</partybranchid><partybranchname>DBPB001</partybranchname><partyid>2534954639984412</partyid><partyname>DBPRTY001</partyname><ouid>2538210579514587</ouid><organizationunitname>DBORG001</organizationunitname><inchargeid>2540093122446574</inchargeid><sbuheadid>1209449655666077</sbuheadid><usercriteriaconfigid>1187416899913503</usercriteriaconfigid><primarymail>vikash@myunisoft.com</primarymail></Datalist></DataCollection></soapenv:Body></soapenv:Envelope>
【问题讨论】:
-
首先将 log mediator 放入接收序列,并检查 log 响应实际由 out 序列处理。其次,打开浏览器开发者控制台并检查请求的 Content-Type 标头的值是什么
-
另一种情况是您提供的示例中的“messagetype”与文档中的“messageType”不同。 Java 语言区分大小写
-
我已经把 log mediatro 和你说的做了一些改变,但是我得到了相同的标签格式的响应我认为这是原因 asis2.xml 中的 messagebuilder 它没有将soap消息转换为 JSONresponse有效负载调解器,你有什么想法..
-
我检查了 PayloadMediator 的源代码,它似乎根据提供的媒体类型设置了 messageType 属性。您是否尝试在发送回复消息之前将
调解器移动到?
标签: wso2 axis2 wso2esb wso2carbon wso2dss