You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 MI 4.0.0中Iterator结合Aggregate Mediator失效问题求助

WSO2 MI 4.0.0 Iterator+Aggregate 聚合失效问题排查与解决

问题现象

Iterator内日志输出正常,但Aggregate的onComplete块无日志输出,修改continueParent为false也无法触发聚合完成逻辑。

核心问题分析

  1. Iterator遍历目标错误:原表达式//Customers匹配的是外层数组节点,仅会迭代1次,而非每个Customer对象,导致聚合无足够消息触发完成条件。
  2. JSON格式非法:Payload Factory中DOJ字段未添加引号,生成的JSON不符合规范,影响聚合消息的识别。
  3. 逻辑执行顺序错误:聚合未完成时就执行后续Payload Factory和日志逻辑,此时聚合结果尚未写入上下文。

修正方案

1. 修正Iterator遍历表达式

将遍历表达式改为//Customers/*/*,定位到最内层的每个Customer对象,确保每个对象都被迭代处理。

2. 修复Payload Factory的JSON格式

给DOJ字段添加引号,保证生成的JSON合法:

{
    "NAME": "$1",
    "DOJ": "$2"
}

3. 调整聚合后逻辑位置

将聚合后的Payload Factory、日志逻辑移至onComplete块内,确保只有聚合完成后才处理结果。

4. 优化Aggregate配置

设置aggregateElementType="array",明确聚合为数组结构,同时调整expression为json-eval($)确保正确提取每个子消息的JSON内容。

修正后的完整序列代码

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="AGGREGATE_CHECK" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <iterate continueParent="true" expression="//Customers/*/*" id="line-Item-Iterator" sequential="true">
        <target>
            <sequence>
                <property expression="//Name" name="Name" scope="default" type="STRING"/>
                <property expression="//DOJ" name="Doj" scope="default" type="STRING"/>
                <payloadFactory media-type="json">
                    <format>{
                            "NAME": "$1",
                            "DOJ": "$2"
                        }</format>
                    <args>
                        <arg evaluator="xml" expression="$ctx:Name"/>
                        <arg evaluator="xml" expression="$ctx:Doj"/>
                    </args>
                </payloadFactory>
                <log level="full"/>
            </sequence>
        </target>
    </iterate>
    <log>
        <property name="after iterator" value="waiting for aggregation"/>
    </log>
    <aggregate id="line-Item-Iterator">
        <completeCondition>
            <messageCount max="-1" min="-1"/>
        </completeCondition>
        <onComplete aggregateElementType="array" expression="json-eval($)">
            <property expression="$body/*" name="response" scope="operation" type="OM"/>
            <log level="full" category="INFO">
                <property name="Aggregation_Complete" value="true"/>
            </log>
            <payloadFactory media-type="json">
                <format>$1</format>
                <args>
                    <arg evaluator="xml" expression="get-property('operation','response')"/>
                </args>
            </payloadFactory>
            <log>
                <property expression="$body/*" name="Final_Aggregated-response"/>
            </log>
        </onComplete>
    </aggregate>
</sequence>

测试验证

  • 输入Payload:
{
    "data": {
        "level": "asss",
        "Info": {
            "Customers": [
                [
                    {
                        "Name": "Ram",
                        "Age": 26,
                        "city": "TX",
                        "DOJ": "26-06-2002"
                    },
                    {
                        "Name": "Shri",
                        "Age": 29,
                        "city": "TX",
                        "DOJ": "12-06-1999"
                    },
                    {
                        "Name": "Reena",
                        "Age": 25,
                        "city": "TX",
                        "DOJ": "22-06-2007"
                    }
                ]
            ]
        }
    },
    "ms": {}
}
  • 期望输出:
[
    {
        "NAME": "Ram",
        "DOJ": "26-06-2002"
    },
    {
        "NAME": "Shri",
        "DOJ": "12-06-1999"
    },
    {
        "NAME": "Reena",
        "DOJ": "22-06-2007"
    }
]

内容的提问来源于stack exchange,提问作者sathish Sankarzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:34:58