0

我正在尝试在我的 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;
}
4

2 回答 2

0

要直接从您的代码中使用 MEL,您需要使用ExpressionLanguage 接口

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

ExpressionLanguage el = p_eventContext.getMuleContext().getExpressionLanguage();

请注意,所有evaluate接受 a 的方法MuleMessage都已弃用。如果这对您来说是一个问题,那么您必须将您的组件更改为自定义MessageProcessor(即实现org.mule.api.processor.MessageProcessor)。这将使您可以访问MuleEvent您可以从中获取ExpressionLanguage然后调用非弃用方法的evaluate方法。

另请注意,您的问题#[context:serviceName] 不是 MEL 表达式!您可以在此处了解 MEL 语法:http: //www.mulesoft.org/documentation/display/current/Mule+Expression+Language+MEL

于 2013-04-22T16:00:10.867 回答
0

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

p_eventContext.getMuleContext().getExpressionManager();
于 2013-04-22T13:49:07.647 回答