2016-06-03 6 views
0

Beim Aufruf einer Java Funktion in JS ist es nicht möglich in verschiedenen Bereichen zu arbeiten (global/engine).java 8 - Übergabe einer Funktion durch Bindings

engine.eval("function proxy(a){return Java.type('Foo').bar(a);}",engine.getBindings(ScriptContext.GLOBAL_SCOPE)); 
engine.eval("function withoutProxy(){return Java.type('Foo').bar(m);}",engine.getBindings(ScriptContext.ENGINE_SCOPE)); 
engine.eval("function withProxy(){return proxy(m);}", engine.getBindings(ScriptContext.ENGINE_SCOPE)); 

(Wo m ist eine JS-Funktion im Motorgültigkeitsbereich deklariert)

withoutProxy aufrufen funktioniert gut. Aber withProxy wirft

java.lang.ClassCastException: Cannot cast jdk.nashorn.api.scripting.ScriptObjectMirror to java.util.function.Function 
at java.lang.invoke.MethodHandleImpl.newClassCastException(MethodHandleImpl.java:361) 
at java.lang.invoke.MethodHandleImpl.castReference(MethodHandleImpl.java:356) 
at jdk.nashorn.internal.scripts.Script$Recompilation$7$17A$\^eval\_.proxy(<eval>:1) 
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:639) 
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) 
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) 
at jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:117) 
at jdk.nashorn.internal.scripts.Script$Recompilation$6$20$\^eval\_.withProxy(<eval>:1) 
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637) 
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) 
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) 
at jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199) 
at jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:383) 
at jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190) 

(die Stacktrace ist bei der Verwendung von 1.8.0_102-ea Gleiche Ausnahme mit jdk1.8.0_05 und jdk1.8.0_73..)

Also: Habe ich etwas falsch, ist es beabsichtigt oder ein Fehler?

(Gist of my test class)

+0

heruntergeladen werden kann Ich habe keinen Fehler mit JDK 1.8.0_51. Dies könnte ein behobener Fehler gewesen sein? – Tunaki

+0

Im Orakel/Java-Bugtracker steht, dass etwas Ähnliches (nur Ändern von Bindungen) nach 8u40 (also 8u60 und darüber) behoben wurde. Aber afaik 1.8.0_102-ea ist nie als 1.8.0_51. – MisterErwin

+0

Ich habe es auch auf einer anderen Maschine getestet. (Ubuntu mit Java 1.8.0_91). Derselbe Fehler. (Um sicher zu sein, dass es jetzt eine Art Fehlkonfiguration verursacht) – MisterErwin

Antwort

Verwandte Themen