在Mule ESB自定义java转换器中,如何从java代码中评估表达式?
MuleContext有一个表达式管理器,它有一个很好用的evaluate方法。但是,不推荐使用接受MuleMessage的签名,并且不推荐使用的版本需要MuleEvent。 MuleEvent不能从变换器中获得,只能是MuleMessage。
基本上我想要使用的是:
muleContext.getExpressionManager().evaluate(someValue, message);
访问MuleEvent的另一种方法是使用静态RequestContext.getEvent()
。但是,这也被弃用了。我已成功创建一个带有ThreadLocal<MuleEvent>
的静态变量,通过MessageProcessor在流程的早期注入MuleEvent,但它感觉完全错误,并且可能不是最安全的方法。
我错过了什么吗?还有另外一种方法吗?关于迁移路径的java文档中已弃用的注释没有太多指导。
答案 0 :(得分:3)
如果您想避免弃用的方法,可以使用
evaluate(String expression, String evaluator, MuleMessage message, boolean failIfNull)
如果您的表达式只是MEL,请使用null
作为evaluator
,否则它是您的表达式的前缀(json等)。