Esecuzione dello script all'interno del metodo con BeanShell
Domanda
Non sono davvero sicuro di come posso spiegarlo, ma qui va:
Voglio essere in grado di " inserire " alcuni comandi in parti del mio codice che verranno caricati da file esterni. Per analizzare ed eseguire questi comandi, presumibilmente devo usare alcuni script come il metodo eval di BeanShell. Il problema è che non sembra riconoscere l'istanza / metodo all'interno. Come esempio molto semplice, voglio fare qualcosa come
public void somethingHappens()
{
Foo foo = new Foo();
Interpreter i = new Interpreter();
i.eval("print(foo.getName());");
}
È possibile? Dovrei usare altri strumenti di scripting?
Soluzione
Se si utilizza 1.6, è possibile utilizzare il supporto JavaScript incorporato.
La Java Scripting Programmer's Guide spiega come importare le classi Java nel tuo script.
Esempio di codice 9 in questo articolo spiega come passare oggetti nell'ambito dello script.
Altri suggerimenti
Utilizzando beanshell, questo è qualcosa che puoi provare
package beanshell;
import bsh.EvalError;
import bsh.Interpreter;
public class DemoExample {
public static void main( String [] args ) throws EvalError {
Interpreter i = new bsh.Interpreter();
String usrIp = "if(\"abc\".equals(\"abc\")){"
+ "demoExmp.printValue(\"Rohit\");"
+ "}";
i.eval(""
+ "import beanshell.DemoExample;"
+ "DemoExample demoExmp = new beanshell.DemoExample();"
+ ""+usrIp);
}
public static void printValue(String strVal){
System.out.println("Printing Value "+strVal);
}
}