在Java中使用org.mule.expression.DefaultExpressionManager类

在Java中使用org.mule.expression.DefaultExpressionManager类,java,mule,mule-studio,Java,Mule,Mule Studio,我试图在java类中使用MEL函数。我发现我可以使用org.mule.expression.DefaultExpressionManager类的求值方法来实现这一点。我试图在onCall方法中实现这一点,但它似乎对我不起作用。DefaultExpressionManager的使用方式是否存在问题 public Object onCall(MuleEventContext p_eventContext) throws Exception { // TODO Auto-genera

我试图在java类中使用MEL函数。我发现我可以使用org.mule.expression.DefaultExpressionManager类的求值方法来实现这一点。我试图在onCall方法中实现这一点,但它似乎对我不起作用。DefaultExpressionManager的使用方式是否存在问题

public Object onCall(MuleEventContext p_eventContext) throws Exception 
{
        // TODO Auto-generated method stub
        System.out.println("reached inside onCall");
        MuleMessage l_receivedMsg = p_eventContext.getMessage();
        DefaultExpressionManager l_ExpressionManager = new DefaultExpressionManager();
    System.out.println("ServiceName==" +(String) l_ExpressionManager.evaluate("#[context:serviceName]", l_receivedMsg));
        return l_receivedMsg;
}

执行以下操作,而不是实例化DefaultExpressionManager:

p_eventContext.getMuleContext().getExpressionManager();

要直接从代码中使用MEL,需要使用

要获取它的实例,请使用:

ExpressionLanguage el = p_eventContext.getMuleContext().getExpressionLanguage();
请注意,所有接受多消息的
evaluate
方法都已弃用。如果您担心这一点,那么您必须将组件更改为自定义
消息处理器(即实现)。这将使您能够访问
MuleEvent
,从中可以获得
ExpressionLanguage
,然后调用一个未弃用的
evaluate
方法


还要注意,在您的问题中,
#[context:serviceName]
不是MEL表达式!您可以在那里了解MEL语法:

Hi Seba,我尝试了getMuleContext().getExpressionManager().evaluate(“#[context:serviceName]”,l#u receivedMsg)),虽然它可以工作,但我听说该方法现在已被弃用。我想知道这是否是前进的最佳方式!检查ExpressionManager的API是否有未弃用的方法。
ExpressionManager
是旧的。更喜欢使用MEL和
ExpressionLanguage
。getExpressionLanguage()。evaluate(expression,MuleMessage)也不推荐使用!根据您的评论审阅了我的答案。org.mule.processor.MessageProcessor对我有效。谢谢你,大卫!是的,我对骡子还不熟悉,我正试着去了解它。