【问题标题】:Issue in getting the Payload from a foreach Component in Mule.从 Mule 中的 foreach 组件获取有效负载的问题。
【发布时间】:2012-07-26 12:22:03
【问题描述】:

我在 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”的变量中。但是在访问下一个组件中的变量时,迭代集合对象的最后一个值并不是迭代集合对象的全部值。

这里是访问会话变量的代码sn-p。

 eventContext.getMessage().getInvocationProperty("foreachPayload")

请告知这里的问题以及解决方法。

下面附上我的消息流截图

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

【问题讨论】:

    标签: mule


    【解决方案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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多