2016-09-26 4 views
1

Ich habe ein starkes Skript wie:Pass Parameter von Java groovy

import groovy.sql.Sql 

Object execute(def params = null) { 

    def sql = new DBUtils().getConnection() 

    println "sql params : " + params 

    ... 
} 

Und die Java-Klasse wird dieses Skript aufrufen wie:

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} ) ; 

Ich habe versucht, verschiedene Format Argumente, aber keiner von sie arbeiten. Das obige Beispiel wirft die java.lang.IllegalArgumentException: wrong number of arguments

Irgendwelche Gedanken? geschätzt.

+0

Wo wird die Ausnahme ausgelöst? – RamenChef

Antwort

1

Sie haben nicht die Argumente der Typ richtig angeben, sollte es sein:

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

der Tat, wenn Sie getDeclaredMethod("execute", new Class[]{}) rufen Sie eine Methode execute mit kein Argument bekommen so ist es nicht kompatibel mit ein invoke mit einem Argument, wie Sie es versuchen.