Mule MEL使用差异

use*_*178 2 mvel mule mule-studio

我一直在使用不同形式的Mule表达语言.我无法弄清楚它们之间的区别

#[flowVars.myVariable]  
Run Code Online (Sandbox Code Playgroud)

#[flowVars['myVariable']]
Run Code Online (Sandbox Code Playgroud)

当有变量时,它们都给出结果.但是,当变量不存在时,为什么它们的行为会有所不同?

就像被调用的变量不可用一样,第一个表达式会导致异常.而第二个表达式只是发出警告或打印出来,如果在记录器消息中.

为什么会有这种差异?

另外,在浏览Mule 3.6的文档时,我发现第二个表达式不再显示在文档中.

表达式#[flowVars ['myVariable']]是否已被弃用?

Dav*_*sot 6

不同之处在于MVEL处理这两种不同的访问地图条目的方式.

  • #[flowVars['myVariable']]相当于flowVars.get('myVariable'),如果flowVars地图不包含该'myVariable'条目,则不会失败,
  • #[flowVars.myVariable]flowVars映射视为虚拟对象,如果'myVariable'缺少该条目,则会导致异常,因为在这种情况下它不会解析为映射get,而是直接使用对象成员(字段或方法),该对象必须存在被访问.

我不认为#[flowVars['myVariable']]可以弃用,因为它是MVEL提供的核心功能.

参考:http://mvel.codehaus.org/MVEL+2.0+Property+Navigation#MVEL2.0PropertyNavigation-MapAccess