我正在使用mule中的foreach组件。我正在使用Foreach迭代一个集合对象。对于ForEach组件I,我发送一个集合有效负载作为输入.Yoreach迭代集合有效负载。但问题是我无法在下一个组件中获取迭代的foreach有效负载。
这是我的代码Snippnet
<choice doc:name="Choice">
<when expression="#[ognl:instance=='Lamp']">
<processor-chain>
<message-properties-transformer scope="invocation" doc:name="Message Properties">
<add-message-property key="loops" value="0"/>
</message-properties-transformer>
<component class="com.Lamp" doc:name="Java"/>
<foreach doc:name="Foreach">
<component class="com.Candle" doc:name="Java"/>
<logger message="DDD #[message:payload]" level="INFO" doc:name="Logger"/>
<set-variable variableName="foreachPayload" value="#[message:payload]" doc:name="Payload"/>
</foreach>
</processor-chain>
</when>
由于我无法直接获取foreach组件的有效负载,因此我尝试在名为“foreachPayload”的变量中设置该有效负载。但是在访问下一个组件中的变量时,迭代集合对象的最后一个值不是迭代集合对象的整个值。
以下是访问会话变量的代码片段。
eventContext.getMessage().getInvocationProperty("foreachPayload")
请告知此处的问题以及解决此问题的方法。
下面附有我的消息流的屏幕截图
答案 0 :(得分:1)
在foreach
组件之后获取变量中集合的最后一个值的原因是set-variable
覆盖了原始邮件中的foreachPayload
值。这是正确的行为。
也许您应该使用collection-splitter
代替foreach
。处理集合中的每个元素后,使用collection-aggregator
。这样,生成的有效负载就是已处理值的集合。
<collection-splitter enableCorrelation="IF_NOT_SET"/>
<component class="com.Candle" doc:name="Java"/>
<collection-aggregator timeout="6000" failOnTimeout="false"/>