Pass or retrieve values from a scripting engine (jdk1.6)Tag(s): Varia
These examples use the Rhino Javascript engine bundled with Java 6.
The documentation is at Mozilla Rhino site.
import java.util.Arrays; import java.util.List; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class Scripting01 { public static void main(String[] args) { ScriptEngineManager mgr = new ScriptEngineManager(); // we are using the rhino javascript engine ScriptEngine engine = mgr.getEngineByName("javascript"); // pass a Java collection to javascript List <String> list1 = Arrays.asList ("Homer", "Bart", "Marge", "Maggie", "Lisa"); engine.put("list1", list1); String jsCode = "var index; " + "var values =list1.toArray();" + "println('*** Java object to Javascript');" + "for(index in values) {" + " println(values[index]);" + "}"; try { engine.eval(jsCode); } catch (ScriptException se) { se.printStackTrace(); } // pass a collection from javascript to java jsCode = "importPackage(java.util);" + "var list2 = Arrays.asList(['Moe', 'Barney', 'Ned']); "; try { engine.eval(jsCode); } catch (ScriptException se) { se.printStackTrace(); } List <String> list2 = (List<String>) engine.get("list2"); System.out.println("*** Javascript object to Java"); for (String val : list2) { System.out.println(val); } } } /* output : *** Java object to Javascript Homer Bart Marge Maggie Lisa *** Javascript object to Java Moe Barney Ned */
The next example uses an external file containing the javascript code. The .JS file is loaded from the classpath.
[scripting02.js]
importPackage(java.util); var list1 = Arrays.asList (['Homer', 'Bart', 'Marge', 'Maggie', 'Lisa']); var listObject = { list2 : Arrays.asList (['Moe', 'Barney', 'Ned']), getList2 : function() { return listObject.list2; } };
import java.io.InputStreamReader; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Scripting02 { public static void main(String[] args) throws Exception{ ScriptEngineManager mgr = new ScriptEngineManager(); // we are using the rhino javascript engine ScriptEngine engine = mgr.getEngineByName("javascript"); // the .js is in the classpath engine.eval(new InputStreamReader (Scripting02.class.getResourceAsStream("scripting02.js"))); // retreive a javascript object directly List <String> list1 = (List <String>)engine.get("list1"); if (list1 != null) { for (String s : (List<String>) list1) { System.out.println(s); } } System.out.println("***"); // call a javascript function to retrieve an object if (engine instanceof Invocable){ Invocable engineInv = (Invocable)engine; Object obj = engine.get("listObject"); Object list2 = engineInv.invokeMethod(obj, "getList2"); if (list2 != null) { for (String s : (List<String>) list2) { System.out.println(s); } } } } } /* output : Homer Bart Marge Maggie Lisa *** Moe Barney Ned */