2016-09-26 2 views
1

У меня есть заводной сценарий, как:параметров проходят от Явы до 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

Куда вы выбрали исключение? – RamenChef

ответ

1

Вы не указали тип аргументов должным образом, оно должно быть:

String param = "test"; 
Object obj = scriptClass.getDeclaredMethod("execute", new Class[]{Object.class}) 
    .invoke(scriptInstance, new Object[]{param}); 

В самом деле, если вы звоните getDeclaredMethod("execute", new Class[]{}), вы получите метод execute с нет аргумента поэтому он не совместим с invoke, используя аргумент, который вы пытаетесь сделать.

Смежные вопросы