Foreach在AggregateMediator';wso2响应流中的s范围

Foreach在AggregateMediator';wso2响应流中的s范围,wso2,Wso2,Foreach在响应流中的AggregateMediator作用域下工作不正常 输入请求: [ { "name" : "Home" }, { "name" : "Car" }, { "name" : "Mobile" } ] 我使用iterate将上述数组的每个元素作为请求发送给传递服务(在我的实际项目中,这不是传递服务。为了更好地理解这个问题,我将其保持为这样) 通过服务的响应由Aggregate

Foreach在响应流中的AggregateMediator作用域下工作不正常

输入请求:

[
    {
        "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="&quot;Inside Foreach&quot;"/>
                        </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="&quot;Inside Aggr&quot;"/>
                    </log>
                    <log level="full"/>
                    <foreach expression="//Information/jsonObject">
                        <sequence>
                            <log level="custom">
                                <property name="msg4" value="&quot;Inside Foreach&quot;"/>
                            </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="&quot;Inside Modify Service *************************&quot;"/>
            </log>
            <log level="custom">
                <property expression="//jsonObject" name="location"/>
            </log>
            <respond/>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence/>
    </resource>
</api>