Попытка создать ссылку Java / JS с использованием Rhino с двумя очень простыми объектами, один из которых имеет в качестве одного члена экземпляр второго класса.
Запуск приведенного ниже кода приводит к следующей ошибке:
org.mozilla.javascript.EcmaError: TypeError: Невозможно найти значение по умолчанию для объекта.
Кажется, проблема связана с доступом к члену "a" из второго объекта.Я также пытался с геттером, как это:
public Object jsGet_a() {
return Context.toObject(a, this);
}
, но я получаю ту же ошибку.
new A (). DoSmth ();работает нормально, и выводит "Я делаю что-то" new B (). a.doSmth ();поднимает ошибку
Может кто-нибудь помочь мне с возможным решением для этого?
Спасибо!
public class Test {
public static class A extends ScriptableObject implements Scriptable {
public A() {
};
public String getClassName() {
return "A";
}
public void jsFunction_doSmth() {
System.out.println("I'm doing something");
};
}
public static class B extends ScriptableObject implements Scriptable {
private A a = new A();
public B() {
};
public String getClassName() {
return "B";
}
public void jsConstructor() {
}
public A jsGet_a() {
return a;
}
}
public static void main(String[] args) {
try {
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null, true);
ScriptableObject.defineClass(scope, A.class);
ScriptableObject.defineClass(scope, B.class);
cx.compileString("" +
"new A().doSmth();" +
"new B().a.doSmth();" +
"", "", 1, null).exec(cx, scope);
} catch (Exception e) {
e.printStackTrace();
}
}
}