2012-07-26 78 views
0

我使用一个foreach成分mule.I'm迭代使用。这里的foreach为的ForEach分量I集合对象中,M发送的集合有效载荷作为输入.The FOREACH遍历集合的有效载荷。但问题是我无法在下一个组件中获取迭代的foreach有效内容。从Mule中的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”变量。但在访问下一个组件中的变量时,迭代集合对象的最后一个值不是迭代集合对象的整个值。

这里是accesing会话变量的代码段。

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

请让我们知道这里的问题以及解决方法。

下面的连接是我的邮件截图流出

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

回答

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"/> 
+0

做了这个选项的工作?请给出意见 – 2016-01-27 15:54:19