Durch das aufrufen von @JSFunction aus JavaScript TypeError: Cannot find default-Wert für das Objekt

Ich rufe ein @JSFunction annotierten Methode einer ScriptableObject

Die JavaScript-Datei

Target = Packages.com.acme.rhino.Target;

function evaluate() {
    var t = Target();
    t.addModifier("foobar", 1);
    return t;
}

Die Java-Datei

public class Target extends ScriptableObject {
    private static final long serialVersionUID = 1L;
    public List<Modifier> modifiers = new LinkedList<>();

    @JSConstructor
    public Target() {
    }

    @JSFunction
    public void addModifier(final String message, final int value) {
        modifiers.add(new Modifier(message, value));
    }

    public int getValue() {
        int sum = 0;
        for (final Modifier modifier : modifiers) {
            sum += modifier.getValue();
        }
        return sum;
    }

    @Override
    public String getClassName() {
        return "Target";
    }
}

Aber ich bekomme

org.mozilla.javascript.EcmaError: TypeError: Cannot find default value for object.
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3687)
    at org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3665)
    at org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3693)
    at org.mozilla.javascript.ScriptRuntime.typeError1(ScriptRuntime.java:3705)
    at org.mozilla.javascript.ScriptableObject.getDefaultValue(ScriptableObject.java:976    )
    at org.mozilla.javascript.ScriptableObject.getDefaultValue(ScriptableObject.java:895    )
    at org.mozilla.javascript.ScriptRuntime.toString(ScriptRuntime.java:761)
    at org.mozilla.javascript.ScriptRuntime.notFunctionError(ScriptRuntime.java:3774)
    at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.    java:2269)
    at org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.    java:2251)
    at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:83)
    at org.mozilla.javascript.gen.script_5._c_evaluate_1(script:6)
    at org.mozilla.javascript.gen.script_5.call(script)
    at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
    at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
    at org.mozilla.javascript.gen.script_5.call(script)

sind und nicht wissen, wo Sie gehen von dort aus. Wenn ich nicht anrufen addModifier Methode der angegebene code funktioniert, und angesichts der Fehler notFunctionError unten im stack trace ich denke, dass Rhino nicht interpretieren Sie die vorliegende Methode als JavaScript-Funktion.

  • OSX 10.8.2
  • Java 7
  • Rhino 1.7R4

Kompletten Maven-Projekt, das den Fehler reproduziert werden kann, gefunden hier

InformationsquelleAutor oschrenk | 2013-01-28
Schreibe einen Kommentar