0

我在 mule 中使用了一个 foreach 组件。我正在使用 Foreach 迭代一个集合对象。对于 ForEach 组件,我正在发送一个集合有效负载作为输入。Foreach 迭代集合有效负载。但问题是我无法在下一个组件中获取 Iterated foreach 有效负载。

这是我的代码片段

    <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

4

1 回答 1

1

在组件之后获得变量中集合的最后一个值的原因foreachset-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"/>
于 2012-07-26T23:38:21.923 回答