【问题标题】:How to iterate a map using Foreach in mule?如何在 mule 中使用 Foreach 迭代地图?
【发布时间】:2015-09-08 05:58:31
【问题描述】:

我将“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}...................,

基于“总和”值,我需要将每条记录发送到两个不同的文件中。我感到震惊的是我不知道如何在我保留问号的 foreach、when 和 logger 语句中编写这些条件语句。

 <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”的情况下编写条件语句,请就此提出建议并发表评论。我是 mule 的新手。,谢谢。,

【问题讨论】:

标签: csv dictionary foreach mule mule-component


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

如果您想在单个映射中迭代不同的条目,您可以使用以下方法:

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

【讨论】:

    【解决方案2】:

    我会链接我以前的answer,其本质是不要尝试将程序逻辑编码为流程,使用组件来处理这类事情。

    但是,如果您正在尝试学习,那么@Ryan 的答案就对了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多