我将"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、when和logger语句中编写这些条件语句,我在这些语句中保留了问号。
<foreach doc:name="For Each" collection="?????????????????">
<choice doc:name="Choice">
<when expression="???????????<=30">
</when>
<otherwise>
<data-mapper:transform doc:name="DataMapper"/>
<logger message="default logger "?????????" level="INFO"doc:name="Logger"/>
</otherwise>
</choice>
</foreach>如果你知道如何写条件语句,请在这方面给我建议,如果输入了"CSV“,我是新手,谢谢。
发布于 2015-09-07 19:40:17
Mule使用基于MVEL的MEL作为表达式语言。它允许您使用点语法来导航Map和POJO等,或者使用标准的Java方法调用:
#[message.payload.get('Sum')]
#[message.payload.Sum]如果您不提供collection expresssion,则foreach将自动默认为消息有效负载。如果您的有效负载是一个集合,那么它应该是好的。看起来您的有效负载是一个地图集合,因此您应该能够使用:
<foreach doc:name="For Each" collection="#[message.payload]">
<choice doc:name="Choice">
<when expression="#[message.payload.Sum < 30]">
</when>
<otherwise>
<logger message="#[message.payload.Sum]" level="INFO"doc:name="Logger"/>
</otherwise>
</choice>
</foreach>如果要在单个映射中迭代不同的条目,可以使用以下方法:
<foreach collection="#[message.payload.entrySet()]">
...
</foreach>发布于 2015-09-08 05:58:31
我会链接我之前的一个answer,其本质是不要试图将过程逻辑编码到流中,使用组件来实现这类东西。
但是,如果你正在尝试学习,那么@Ryan的答案是正确的。
https://stackoverflow.com/questions/32437365
复制相似问题