我如何使用MEL作为Invoke的methodArguments创建一个静态字符串数组

时间:2014-06-17 22:05:17

标签: java mule

我尝试使用带有字符串和字符串数组的组件来调用方法。

flow.xml:

<invoke object-ref="ResponseHandler" method="nullPayload" methodArguments="#[message, #['getProducts', 'getProduct']]" />

ResponseHandler.java:

public class ResponseHandler
{
ResponseHandler()
{

}

public void nullPayload(MessageContext message, ArrayList<String> methods)
{
    message.setPayload("");
}

但是当我尝试运行该应用程序时,会出现以下错误:

Single method "nullPayload", with "3" arguments not found

关于如何解决这个问题的任何想法?

由于

1 个答案:

答案 0 :(得分:2)

我看到两个问题。首先,您应关闭methodArguments中的第一个表达式,并且数组的MEL语法为{},表达式为:

<invoke object-ref="ResponseHandler" method="nullPayload" methodArguments="#[message], #[ { 'getProducts', 'getProduct' } ]" />

但是这也失败了,因为你的方法收到一个ArrayList,但是你正在发送一个数组。您应该在MEL表达式中创建一个ArrayList,但是对于我所看到的,当您使用泛型时,这并不能很好地工作。所以,尝试使用:

<invoke object-ref="ResponseHandler" method="nullPayload" methodArguments="#[message], #[ a = new ArrayList(); a.add('getProducts'); a.add('getProduct'); return a; ]" />

在您的代码中:

public void nullPayload(MessageContext message, ArrayList methods) {
    message.setPayload(message.getPayload() + "OK1");
}

我还试图改变接收String []的方法,但是因为你得到的错误而失败,似乎Mule在这里做得不好。