我有一个选择流控制组件,它使用如下表达式:
<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 ....}]
有人能告诉我这个问题背后的原因是什么?
答案 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>
希望这能帮到你!