在WSO2中能否将Aggregate Mediator的结果负载存储到Property Mediator?
将Aggregate合并结果存入Property Mediator的实现方案
核心实现步骤
确保Aggregate输出合并后的负载
在Aggregate Mediator的<onComplete>节点中,默认会将合并后的结果替换为当前流程的消息体,无需额外转换,保证后续能直接获取完整的合并payload。用Property Mediator存储负载
在Aggregate的<onComplete>内部或之后添加Property Mediator,根据负载类型选择合适的存储方式:- 若负载是XML/JSON结构化数据,用
type="OM"(WSO2默认消息对象类型,保留完整结构方便后续处理):<property name="MergedCustomerData" expression="$body" type="OM"/> - 若需转为字符串存储,用
type="STRING":<property name="MergedCustomerDataStr" expression="$body" type="STRING"/>
- 若负载是XML/JSON结构化数据,用
后续业务调用存储的属性
在后续流程中,通过get-property('属性名')即可获取存储的合并结果,例如:<!-- 示例:打印存储的合并结果 --> <log level="custom"> <property name="合并客户数据" expression="get-property('MergedCustomerData')"/> </log>
完整流程示例片段
<!-- 前置:Iterate遍历客户ID并调用HTTP接口 --> <iterate expression="//CustomerIDs/CustomerID" id="CustomerIteration"> <sequence> <property name="uri.var.customerId" expression="$body/text()"/> <call> <endpoint> <http method="GET" uri-template="http://your-api-endpoint/customers/{uri.var.customerId}"/> </endpoint> </call> </sequence> </iterate> <!-- Aggregate合并结果并存储到Property --> <aggregate id="CustomerIteration"> <completeCondition> <messageCount max="-1"/> <!-- 等待所有迭代任务完成 --> </completeCondition> <onComplete expression="//CustomerResult"> <!-- 指定合并的目标节点路径 --> <!-- 存储合并后的完整payload --> <property name="MergedCustomerResults" expression="$body" type="OM"/> </onComplete> </aggregate> <!-- 后续业务逻辑中使用存储的属性 --> <payloadFactory media-type="json"> <format>{"processedCustomerData": "$1"}</format> <args> <arg evaluator="xml" expression="get-property('MergedCustomerResults')"/> </args> </payloadFactory>
内容的提问来源于stack exchange,提问作者Boppena Prashanth
相关产品推荐
相关产品推荐

