我尝试使用带有字符串和字符串数组的组件来调用方法。
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
关于如何解决这个问题的任何想法?
由于
答案 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在这里做得不好。