If statement 如何在mulesoft中实现IF

If statement 如何在mulesoft中实现IF,if-statement,mule,choice,If Statement,Mule,Choice,我想在Mulesoft流中做一个决定,并研究了选择流控制。我的问题是,如果条件为真,我想做点什么,如果条件为假,我什么也不想做,比如: if (condition == true) do some work 或者,在可能不正确的xml中: <choice doc:name="call a subflow if the test is true"> <when expression="#[flowVars.someVariable == True]">

我想在Mulesoft流中做一个决定,并研究了选择流控制。我的问题是,如果条件为真,我想做点什么,如果条件为假,我什么也不想做,比如:

if (condition == true)
   do some work
或者,在可能不正确的xml中:

<choice doc:name="call a subflow if the test is true">
    <when expression="#[flowVars.someVariable == True]">
        <flow-ref name="doSomething" doc:name="do another thing"/>
    </when>
</choice>

没有else子句,也没有默认流。这是如何在Mulesoft流中实现的?
我可以作弊,并将日志调用抛出到默认流中,但我更愿意这样做。

不幸的是,Mule中没有简单的“if”处理器。选择虚拟路由或过滤器是目前的方向

这里有一个很好的讨论:。这进一步链接到可能的增强功能,如if/detour路由器

Mule 4更新


在mule 4中,您现在可以定义一个choice路由器,而不需要
或者
路由。过滤器不再存在

您可以使用异步或enricher作用域和过滤器来接近。它不像真正的
处理器()那样优雅,但您不需要浪费
来满足
的要求

异步方法(之后不需要有效负载时):


Enricher方法(当您这样做时):


在mule流中,当使用消息路由器而未在节中设置处理器,并且mule消息与任何子句都不匹配时,将引发异常。要实现当前的条件行为,mule需要在otherwise子句上设置一个虚拟处理器。一个可用性改进是,如果没有匹配子句,也没有提供处理器,则允许流的其余部分处理消息

除此之外,有人建议我研究过滤器,但在我看来,我希望使用某种决策流控制。或者这可能只是我多年编程的偏见,妨碍了我看到明显的解决方案。显然,我没有足够的声誉来投票支持你的答案,Ryan,但是谢谢。我发现最简单的方法是设置变量:
<async>
    <expression-filter expression="#[payload == 'red']" />
    <logger category="com.box.integration.experiment" message="That's my favorite color!" level="INFO" />
</async>
<enricher target="#[variable:colorName]">
    <processor-chain>
        <expression-filter expression="#[payload == 'red']" />
        <set-payload value="vermillion" />
    </processor-chain>
</enricher>