从Mule中的foreach组件获取Payload的问题。

时间:2012-07-26 12:22:04

标签: mule

我正在使用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")

请告知此处的问题以及解决此问题的方法。

下面附有我的消息流的屏幕截图

http://i.stack.imgur.com/mm64s.jpg

1 个答案:

答案 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"/>