2015-04-27 1 views
0

J'ai des difficultés à accéder aux classes Java en JavaScript. Appeler un extrait de codeImpossible d'accéder à java.lang.String dans le script exécuté dans Rhino

var String = Java.type("java.lang.String"); 

de Java via javax.script.ScriptEngine, les rendements follwing Erreur

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "Java" is not defined. (path/to/string.js#1) in path/to/string.js at line number 1 
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:156) 
    at main.JsTest.main(JsTest.java:55) 

Utilisation des classes non-Java dans le scénario fonctionne bien, par exemple var value = a + b, où a et b sont définis dans un javax.script.ScriptContext.

Ceci est la classe Java qui exécute le script.

JsTest.java

public class JsTest 
{ 
    public static void main(String[] args) throws Exception 
    { 
    ScriptEngineManager sem = new ScriptEngineManager(); 
    ScriptEngine se = sem.getEngineByExtension("js"); 

    String script = "path/to/string.js"; 
    File scriptFile = new File(script); 
    FileReader fr = new FileReader(scriptFile); 

    se.put(ScriptEngine.FILENAME, script); 

    ScriptContext sc = new SimpleScriptContext(); 
    se.eval(fr, sc); 
    } 
} 

Répondre

1

Je ne sais pas où votre Java.type vient, mais le official documentation utilise Packages.java ou tout simplement java.

donc votre ligne devrait probablement ressembler à

var String = Packages.java.lang.String; 
+0

Apparemment, je mélange dans [syntaxe Nashorn] (https://wiki.openjdk.java.net/display/Nashorn/Rhino+Migration+Guide). – mike