Я ищу переопределение метода java из javascript в rhino. Вот мой код:
public class CustomClass {
public String s="some string";
public void doSomething(){}
}
а потом:
Object wrappedOut = Context.javaToJS(new CustomClass(), scope);
ScriptableObject.putProperty(scope, "CustomClass", wrappedOut);
String s="CustomClass.s='aaa'; \n CustomClass.doSomething=function(args){};";
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
Таким образом, можно изменить значение на CustomClass.s, но не на метод doSomething.
Я получаю следующую ошибку:
org.mozilla.javascript.EvaluatorException: метод Java "doSomething" не может быть назначен. (# 2)
ОБНОВЛЕНИЕ Как и просили в комментариях, вот мой полный исходный код:
CustomClass.java
public class CustomClass {
public String s="Do something now!";
public void doSomething(Object ... v){
System.out.println("do something");
}
}
Скрипты.java
import org.mozilla.javascript.*;
public class Scripting {
public static void main(String args[])
{
Context cx = Context.enter();
try {
Scriptable scope = cx.initStandardObjects();
Object wrappedOut = Context.javaToJS(new CustomClass(), scope);
ScriptableObject.putProperty(scope, "CustomClass", wrappedOut);
String s="CustomClass.doSomething=function(args){};";
Object result = cx.evaluateString(scope, s, "<cmd>", 1, null);
System.err.println(Context.toString(result));
}catch(WrappedException e){
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}finally {
// Exit from the context.
Context.exit();
}
}
}