Executar script de método dentro com BeanShell
Pergunta
Eu não sou realmente certo como eu posso explicar isso, mas aqui vai:
Eu quero ser capaz de "Inserir" alguns comandos em partes do meu código que serão carregados a partir de arquivos externos. Para analisar e executar estes comandos, eu presumivelmente tem que usar alguns scripts como método eval do BeanShell. O problema é que ele não parece reconhecer a instância / método é dentro de. Como um exemplo muito básico, eu quero fazer algo como
public void somethingHappens()
{
Foo foo = new Foo();
Interpreter i = new Interpreter();
i.eval("print(foo.getName());");
}
Isso é possível? Devo usar outras ferramentas de script?
Solução
Se você estiver usando 1.6, você pode usar o construída em suporte JavaScript.
O Guia do Java Script Programador explica como importar classes Java em seu script.
Código exemplo 9 neste artigo explica como passar objetos em escopo do script.
Outras dicas
Usando beanshell, isso é algo que você pode tentar
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);
}
}