Mule ESB 中的选择流控制组件失败

Choice flow control component fails in Mule ESB

我有一个使用如下表达式的选择流控制组件:

 <choice>
   <when expression="${LoggingFlag} == YES">SOME CODE</when>
   <otherwise>SOME OTHER CODE</otherwise>                                                                                                           
 </choice>

这里使用的LoggingFlag是app.properties文件中定义的键值对

LoggingFlag=NO

当我 运行 代码时,我看到以下错误:

Execution of the expression "NO == YES" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: String
Exception stack is:
1. [Error: unresolvable property or identifier: NO]
[Near : {... NO == YES ....}]

谁能告诉我这个问题背后的原因是什么?

您需要将 when 表达式中的变量用单引号 ' ' 括起来

<choice doc:name="Choice">
       <when expression="'${LoggingFlag}' == 'YES'"><set-payload value="payload 1" doc:name="Set Payload"/></when>
       <otherwise><set-payload value="payload 2" doc:name="Set Payload"/></otherwise>                                                                                                           
</choice>

发生此错误是由于 Mule 无法解析值的类型,在选择时将其设置为 LoggingFlag。 为此,您需要明确地将类型更改为字符串,以便 Mule 可以轻松地比较两者。 为此,您需要使用:

<choice> <when expression="'${LoggingFlag}' == 'YES'">SOME CODE</when> <otherwise>SOME OTHER CODE</otherwise> </choice>

您甚至可以尝试读取 属性 值并将其存储在变量中,然后将变量值与选择组件中的字符串进行比较,如下所示:

<set-variable variableName="SetLoggingFlag" value="${LoggingFlag}" doc:name="SetLoggingFlag"/>
<choice>
<when expression="#[flowVars.SetLoggingFlag=='YES']">SOME CODE</when>   
<otherwise>SOME OTHER CODE</otherwise>
</choice>

希望对您有所帮助!