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

时间:2015-11-25 05:04:02

标签: 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 ....}]

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

当表达式在单引号''

中时,您需要将变量括起来
<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>

答案 2 :(得分:0)

您甚至可以尝试读取属性值并将其存储在变量中,然后将变量值与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>

希望这能帮到你!