Sto cercando di eseguire uno script javascript con il nuovo Java 8 Nashorn motore JavaScript, ma non riesce con il seguente errore:readFully non definita con Java Nashorn JavaScript Engine
<eval>:1 ReferenceError: "readFully" is not defined
Lo script utilizza la funzione readFully che dovrebbe essere definito nell'ambito globale nashorn viene eseguito con la modalità di scripting abilitata (che è predefinita quando si esegue uno ScriptEngine come si vede qui http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-December/002562.html).
Ecco un esempio per riprodurre l'errore:
import java.io.FileNotFoundException;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Test {
public static void main(String[] argv) throws FileNotFoundException, ScriptException {
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
scriptEngine.eval("print('Hey!');print(print);print(readFully);");
}
}
Questo campione stampe Hey! e quindi il codice sorgente della funzione di stampa (un'altra funzione incorporata di nashorn) e infine dovrebbe stampare il codice sorgente del metodo readFully. Ma ho questa eccezione invece:
Exception in thread "main" javax.script.ScriptException: ReferenceError: "readFully" is not defined in <eval> at line number 1
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:586)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:570)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:525)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:521)
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:192)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at com.github.bringking.maven.requirejs.Test.main(Test.java:14)
Caused by: <eval>:1 ReferenceError: "readFully" is not defined
at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:58)
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:320)
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:292)
at jdk.nashorn.api.scripting.NashornScriptEngine.__noSuchProperty__(NashornScriptEngine.java:272)
at jdk.nashorn.internal.scripts.Script$engine.L:35(nashorn:engine/resources/engine.js:37)
at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:1)
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:535)
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:209)
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:568)
... 5 more
Quando lo script di esempio viene eseguito con la riga di comando con il parametro Nashorn -scripting (con lo strumento jjs del JDK), tutto va bene. Ecco il risultato dello stesso copione:
Hey!
function print() { [native code] }
function readFully() { [native code] }
ho potuto riscrivere un metodo readFully e associarlo con il contesto sceneggiatura, ma io preferisco di capire il motivo per cui non funziona e utilizzare le funzioni già integrate.
saluti
Cosa JDK stai usando? Oracle o OpenJDK? –
Orcale JDK su Windows 7: versione java "1.8.0_25", Java (TM) SE Runtime Environment (build 1.8.0_25-b18), Java HotSpot (TM) Client VM (build 25.25-b02, modalità mista) – Stratehm
Il blog post che hai collegato a re: openjdk. Sono ancora un po 'diversi. –