如何在mule中使用Foreach迭代地图?

时间:2015-09-07 11:16:35

标签: csv dictionary foreach mule mule-component

我将“MAP”作为foreach的输入:

{Id=1, Sum=10, Name=Jon1, Level=1}, 
{Id=2, Sum=20, Name=Jon2, Level=1}, 
{Id=3, Sum=30, Name=Jon3, Level=1}...................,

根据“Sum”值,我需要将每条记录发送到两个不同的文件中。在我触及的地方,我不知道如何在foreach中编写这些条件语句,何时和记录器语句中我保留了问号。

 <foreach  doc:name="For Each" collection="?????????????????">  
 <choice doc:name="Choice">
 <when expression="???????????&lt;=30">
 </when>
 <otherwise>
 <data-mapper:transform doc:name="DataMapper"/>
 <logger message="default logger "?????????" level="INFO"doc:name="Logger"/>
 </otherwise>
 </choice>        
 </foreach>

如果您知道如果输入“CSV”就知道如何编写条件语句,请在此建议我并发表评论。我是骡子的新手。谢谢。,

2 个答案:

答案 0 :(得分:1)

Mule使用基于MVEL的MEL作为表达语言。它允许您使用点语法来导航Maps和POJO等或标准Java方法调用:

#[message.payload.get('Sum')]

#[message.payload.Sum]

如果您未提供collection表达,则foreach将自动默认为消息有效内容。如果您的有效负载是一个集合,那么它应该没问题。看起来您的有效负载是地图集合,因此您应该能够使用:

<foreach  doc:name="For Each" collection="#[message.payload]">  
 <choice doc:name="Choice">
 <when expression="#[message.payload.Sum &lt; 30]">
 </when>
 <otherwise>
 <logger message="#[message.payload.Sum]" level="INFO"doc:name="Logger"/>
 </otherwise>
 </choice>        
 </foreach>

如果要迭代SINGLE地图中的不同条目,可以使用以下内容:

<foreach collection="#[message.payload.entrySet()]">
  ...
</foreach>

答案 1 :(得分:0)

我会链接我的前一个answer,其实质是不要尝试将程序逻辑编码为流程,使用组件来处理这类内容。

但是如果你正在努力学习,那么@Ryan的答案是正确的。