Mule MEL使用差异

时间:2015-04-07 19:10:47

标签: mule mule-studio mvel

我一直在使用不同形式的Mule表达语言。 我无法弄清楚

之间的区别
#[flowVars.myVariable]  

#[flowVars['myVariable']]

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

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

为什么会有这种差异?

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:1)

大卫对你的问题给出了很好的解释。为了扩展该解释,我想补充一点,您可以使用#[flowVars.?myVariable]使您的代码为null安全。这相当于#[flowVars ['myVariable']]。

关于#[header:originalFilename],正如大卫所说,这不是MEL。您可以在以下链接中获取Mule应用程序中常用的非mel表达式列表。

http://www.mulesoft.org/documentation/display/current/Non-MEL+Expressions+Configuration+Reference