我将“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="???????????<=30">
</when>
<otherwise>
<data-mapper:transform doc:name="DataMapper"/>
<logger message="default logger "?????????" level="INFO"doc:name="Logger"/>
</otherwise>
</choice>
</foreach>
如果您知道如果输入“CSV”就知道如何编写条件语句,请在此建议我并发表评论。我是骡子的新手。谢谢。,
答案 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 < 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的答案是正确的。