我有一个groovy脚本,如:
import groovy.sql.Sql
Object execute(def params = null) {
def sql = new DBUtils().getConnection()
println "sql params : " + params
...
}
java类将调用此脚本,如:
Class scriptClass = new GroovyClassLoader().parseClass( new File(url) ) ;
Object scriptInstance = scriptClass.newInstance() ;
String param = {"test"};
Object obj = scriptClass.getDeclaredMethod("execute", new Class[] {})
.invoke( scriptInstance, new Object[] {param} ) ;
我尝试了各种格式参数,但没有一个能够正常工作。上面的示例将抛出java.lang.IllegalArgumentException: wrong number of arguments
有什么想法?赞赏。
答案 0 :(得分:1)
您没有正确指定参数的类型,它应该是:
String param = "test";
Object obj = scriptClass.getDeclaredMethod("execute", new Class[]{Object.class})
.invoke(scriptInstance, new Object[]{param});
确实,如果您致电getDeclaredMethod("execute", new Class[]{})
,您将获得一个方法execute
无参数,因此它与使用参数的invoke
不兼容你正试图这样做。