Foreach在AggregateMediator';wso2响应流中的s范围
Foreach在响应流中的AggregateMediator作用域下工作不正常 输入请求:Foreach在AggregateMediator';wso2响应流中的s范围,wso2,Wso2,Foreach在响应流中的AggregateMediator作用域下工作不正常 输入请求: [ { "name" : "Home" }, { "name" : "Car" }, { "name" : "Mobile" } ] 我使用iterate将上述数组的每个元素作为请求发送给传递服务(在我的实际项目中,这不是传递服务。为了更好地理解这个问题,我将其保持为这样) 通过服务的响应由Aggregate
[
{
"name" : "Home"
},
{
"name" : "Car"
},
{
"name" : "Mobile"
}
]
我使用iterate将上述数组的每个元素作为请求发送给传递服务(在我的实际项目中,这不是传递服务。为了更好地理解这个问题,我将其保持为这样)
通过服务的响应由AggregateMediator聚合到一个soap xml中
下面是AggregateMediator的响应
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<Information>
<jsonObject>
<name>Mobile</name>
</jsonObject>
<jsonObject>
<name>Car</name>
</jsonObject>
<jsonObject>
<name>Home</name>
</jsonObject>
</Information>
</soapenv:Body>
</soapenv:Envelope>
可移动的
汽车
家
使用foreach根据响应中的一些参数修改每个响应。
但是Foreach在响应流的聚合器范围内不能正常工作。它的反应很奇怪
对于每个响应:
[2017-07-11 14:07:44,696] INFO - LogMediator msg4 = "Inside Foreach"
[2017-07-11 14:07:44,697] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:3e1fd827-12ab-413c-824d-c9daf7b6df7c, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<jsonObject>
<name>Home</name>
</jsonObject>
</soapenv:Body>
</soapenv:Envelope>
[2017-07-11 14:07:44,697] INFO - LogMediator msg4 = "Inside Foreach"
[2017-07-11 14:07:44,697] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:3e1fd827-12ab-413c-824d-c9daf7b6df7c, Direction: response, Payload: {"name":"Home"}
[2017-07-11 14:07:44,697] INFO - LogMediator msg4 = "Inside Foreach"
[2017-07-11 14:07:44,698] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:3e1fd827-12ab-413c-824d-c9daf7b6df7c, Direction: response, Payload: {"name":"Home"}
--------------------------------------------------------------------------------
The second and third iterate of foreach should have been like below :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<jsonObject>
<name>Mobile</name>
</jsonObject>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<jsonObject>
<name>Car</name>
</jsonObject>
</soapenv:Body>
</soapenv:Envelope>
Instead of :
Payload: {"name":"Home"}
Payload: {"name":"Home"}
[2017-07-11 14:07:44696]INFO-LogMediator msg4=“内部Foreach”
[2017-07-11 14:07:44697]信息-LogMediator收件人:http://www.w3.org/2005/08/addressing/anonymous,WSAction:,SOAPAction:,MessageID:urn:uuid:3e1fd827-12ab-413c-824d-c9daf7b6df7c,方向:响应,信封:
家
[2017-07-11 14:07:44697]INFO-LogMediator msg4=“内部Foreach”
[2017-07-11 14:07:44697]信息-LogMediator收件人:http://www.w3.org/2005/08/addressing/anonymous,WSAction:,SOAPAction:,MessageID:urn:uuid:3e1fd827-12ab-413c-824d-c9daf7b6df7c,方向:响应,负载:{“名称”:“主页”}
[2017-07-11 14:07:44697]INFO-LogMediator msg4=“内部Foreach”
[2017-07-11 14:07:44698]信息-日志调解人收件人:http://www.w3.org/2005/08/addressing/anonymous,WSAction:,SOAPAction:,MessageID:urn:uuid:3e1fd827-12ab-413c-824d-c9daf7b6df7c,方向:响应,负载:{“名称”:“主页”}
--------------------------------------------------------------------------------
foreach的第二次和第三次迭代应该如下所示:
可移动的
汽车
而不是:
有效负载:{“name”:“Home”}
有效负载:{“name”:“Home”}
请查找下面的流xml
forEachTest.xml:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/foreschTest" name="foreachTest" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST GET" uri-template="/hi">
<inSequence>
<log level="full"/>
<log level="custom">
<property expression="//jsonArray" name="message"/>
</log>
<iterate expression="//jsonArray/jsonElement" id="1">
<target>
<sequence>
<log level="custom">
<property name="msg2" value=""Inside Foreach""/>
</log>
<log level="full"/>
<send>
<endpoint key="modifyAgrRespEP"/>
</send>
</sequence>
</target>
</iterate>
</inSequence>
<outSequence>
<property name="info" scope="default">
<Information xmlns=""/>
</property>
<aggregate id="1">
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete enclosingElementProperty="info" expression="//jsonObject">
<log level="custom">
<property name="msg3" value=""Inside Aggr""/>
</log>
<log level="full"/>
<foreach expression="//Information/jsonObject">
<sequence>
<log level="custom">
<property name="msg4" value=""Inside Foreach""/>
</log>
<log level="full"/>
</sequence>
</foreach>
</onComplete>
</aggregate>
</outSequence>
<faultSequence/>
</resource>
</api>
modifyAgrRes(直通流):
<?xml version="1.0" encoding="UTF-8"?>
<api context="/mod" name="modifyAgrRes" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST GET" uri-template="/aggr">
<inSequence>
<log level="custom">
<property name="message" value=""Inside Modify Service *************************""/>
</log>
<log level="custom">
<property expression="//jsonObject" name="location"/>
</log>
<respond/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>