Mule MEL使用差异

Mule MEL使用差异,mule,mule-studio,mvel,Mule,Mule Studio,Mvel,我一直在使用不同形式的Mule表达语言。 我想不出两者之间的区别 #[flowVars.myVariable] 及 当存在变量时,它们都给出结果。但是,当变量不存在时,为什么它们的行为会不同呢 如果调用的变量不可用,则第一个表达式将导致异常。而第二个表达式只是发出警告或按原样打印,如果在记录器消息中 为什么会有这种差异 另外,在浏览Mule 3.6的文档时,我发现第二个表达式不再显示在文档中 表达式#[flowVars['myVariable']]是否已被弃用?不同之处在于MVEL处理这两

我一直在使用不同形式的Mule表达语言。 我想不出两者之间的区别

#[flowVars.myVariable]  

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

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

为什么会有这种差异

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


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

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

  • #[flowVars['myVariable']
    相当于
    flowVars.get('myVariable')
    ,如果
    flowVars
    映射不包含
    'myVariable'
    条目,则不会失败
  • #[flowVars.myVariable]
    flowVars
    映射视为虚拟对象,如果
    'myVariable'
    条目丢失,则会导致异常,因为在这种情况下,它不会解析为映射
    get
    ,而是直接使用对象成员(字段或方法),在被访问之前必须存在
我不认为
#[flowVars['myVariable']]
会被弃用,因为它是MVEL提供的核心功能


参考资料:

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

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


谢谢你的解释。但是在当前(3.6)的Mule文档中没有提到#[flowVars['myVariable']]样式的使用。但是,在早期的Mule版本中使用的一些MEL表达式在Mule 3.6.1中不起作用,例如文件中的#[header:originalFilename]:入站端点在Mule 3.6.1中失败。
#[header:originalFilename]
不是MEL,它是自Mule 3.3以来被弃用的旧表达式格式(即“evaluator:expression”)。我不知道为什么Mule的文档中删除了
#[flowVars['myVariable']]
语法。。。也许因为这实际上是一个MVEL特性,所以它不需要任何特定的文档?3.6中有大量测试使用此语法:
#[flowVars['myVariable']]