Java/JDK 6/Script Engines
Содержание
- 1 Any script have to be compiled into intermediate code.
- 2 Call a JavaScript function three times
- 3 Catch ScriptException
- 4 Compresses a String containing JavaScript by removing comments and whitespace.
- 5 Escape and unescape javascript code
- 6 Execute Javascript script in a file
- 7 Executing Scripts from Java Programs
- 8 Get a ScriptEngine by MIME type
- 9 Get Script engine by extension name
- 10 Get the value in JavaScript from Java Code by reference the variable name
- 11 Invoke an function
- 12 Java Language Binding with JavaScript
- 13 Listing All Script Engines
- 14 List the script engines
- 15 Pass or retrieve values from a scripting engine (jdk1.6)
- 16 Pass parameter to JavaScript through Java code
- 17 Read and execute a script source file
- 18 Retrieving Script Engines by Name
- 19 Retrieving the Metadata of Script Engines
- 20 Retrieving the Registered Name of a Scripting Engine
- 21 Retrieving the Supported File Extensions of a Scripting Engine
- 22 Retrieving the Supported Mime Types of a Scripting Engine
- 23 Run JavaScript and get the result by using Java
- 24 Run Javascript function with ScriptEngine
- 25 Running Scripts with Java Script Engine
- 26 Save the compiled JavaScript to CompiledScript object
- 27 Use an external file containing the javascript code
- 28 Use an external file containing the javascript code. The .JS file is loaded from the classpath.
- 29 Use Java scripting engine
- 30 Use Java scripting engine (JDK 1.6)
- 31 Using Java Objects in JavaScript
- 32 Using thread to run JavaScript by Java
- 33 Utility to take xml string and convert it to a javascript based tree within html.
- 34 Variables bound through ScriptEngine
- 35 With Compilable interface you store the intermediate code of an entire script
- 36 Working with Compilable Scripts
Any script have to be compiled into intermediate code.
<source lang="java">
import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class InvocableDemo {
public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); engine.eval("function add (a, b) {c = a + b; return c; }"); Invocable jsInvoke = (Invocable) engine; Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 }); System.out.println(result1); Adder adder = jsInvoke.getInterface(Adder.class); int result2 = adder.add(10, 5); System.out.println(result2); }
} interface Adder {
int add(int a, int b);
}
</source>
Call a JavaScript function three times
<source lang="java">
import javax.script.rupilable; import javax.script.rupiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JDK6CompileTest {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.put("counter", 0); if (engine instanceof Compilable) { Compilable compEngine = (Compilable) engine; try { CompiledScript script = compEngine.rupile("function count(){counter=counter+1;return counter;}; count();"); System.out.println(script.eval()); System.out.println(script.eval()); System.out.println(script.eval()); } catch (ScriptException e) { System.err.println(e); } } else { System.err.println("Engine can"t compile code"); } }
} /*1.0 2.0 3.0*/
</source>
Catch ScriptException
<source lang="java">
import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class BindingDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); engine.put("a", 1); engine.put("b", 5); Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); Object a = bindings.get("a"); Object b = bindings.get("b"); System.out.println("a = " + a); System.out.println("b = " + b); Object result; try { result = engine.eval("c = aaaa + bbbb;"); System.out.println("a + b = " + result); } catch (ScriptException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
} /*a = 1 b = 5 javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "aaaa" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110) at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:124) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) at BindingDemo.main(BindingDemo.java:22)
- /
</source>
Compresses a String containing JavaScript by removing comments and whitespace.
<source lang="java">
/*
* This file is part of the Echo Web Application Framework (hereinafter "Echo"). * Copyright (C) 2002-2009 NextApp, Inc. * * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License. * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or the * GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which * case the provisions of the GPL or the LGPL are applicable instead of those * above. If you wish to allow use of your version of this file only under the * terms of either the GPL or the LGPL, and not to allow others to use your * version of this file under the terms of the MPL, indicate your decision by * deleting the provisions above and replace them with the notice and other * provisions required by the GPL or the LGPL. If you do not delete the * provisions above, a recipient may use your version of this file under the * terms of any one of the MPL, the GPL or the LGPL. */
/**
* Compresses a String containing JavaScript by removing comments and * whitespace. */
public class JavaScriptCompressor {
private static final char LINE_FEED = "\n"; private static final char CARRIAGE_RETURN = "\r"; private static final char SPACE = " "; private static final char TAB = "\t"; /** * Compresses a String containing JavaScript by removing comments and * whitespace. * * @param script the String to compress * @return a compressed version */ public static String compress(String script) { JavaScriptCompressor jsc = new JavaScriptCompressor(script); return jsc.outputBuffer.toString(); } /** Original JavaScript text. */ private String script; /** * Compressed output buffer. * This buffer may only be modified by invoking theappend()
* method. */ private StringBuffer outputBuffer; /** Current parser cursor position in original text. */ private int pos; /** Character at parser cursor position. */ private char ch; /** Last character appended to buffer. */ private char lastAppend; /** Flag indicating if end-of-buffer has been reached. */ private boolean endReached; /** Flag indicating whether content has been appended after last identifier. */ private boolean contentAppendedAfterLastIdentifier = true; /** * Creates a newJavaScriptCompressor
instance. * * @param script */ private JavaScriptCompressor(String script) { this.script = script; outputBuffer = new StringBuffer(script.length()); nextChar(); while (!endReached) { if (Character.isJavaIdentifierStart(ch)) { renderIdentifier(); } else if (ch == " ") { skipWhiteSpace(); } else if (isWhitespace()) { // Compress whitespace skipWhiteSpace(); } else if ((ch == """) || (ch == "\"")) { // Handle strings renderString(); } else if (ch == "/") { // Handle comments nextChar(); if (ch == "/") { nextChar(); skipLineComment(); } else if (ch == "*") { nextChar(); skipBlockComment(); } else { append("/"); } } else { append(ch); nextChar(); } } } /** * Append character to output. * * @param ch the character to append */ private void append(char ch) { lastAppend = ch; outputBuffer.append(ch); contentAppendedAfterLastIdentifier = true; } /** * Determines if current character is whitespace. * * @return true if the character is whitespace */ private boolean isWhitespace() { return ch == CARRIAGE_RETURN || ch == SPACE || ch == TAB || ch == LINE_FEED; } /** * Load next character. */ private void nextChar() { if (!endReached) { if (pos < script.length()) { ch = script.charAt(pos++); } else { endReached = true; ch = 0; } } } /** * Adds an identifier to output. */ private void renderIdentifier() { if (!contentAppendedAfterLastIdentifier) append(SPACE); append(ch); nextChar(); while (Character.isJavaIdentifierPart(ch)) { append(ch); nextChar(); } contentAppendedAfterLastIdentifier = false; } /** * Adds quoted String starting at current character to output. */ private void renderString() { char startCh = ch; // Save quote char append(ch); nextChar(); while (true) { if ((ch == LINE_FEED) || (ch == CARRIAGE_RETURN) || (endReached)) { // JavaScript error: string not terminated return; } else { if (ch == "\\") { append(ch); nextChar(); if ((ch == LINE_FEED) || (ch == CARRIAGE_RETURN) || (endReached)) { // JavaScript error: string not terminated return; } append(ch); nextChar(); } else { append(ch); if (ch == startCh) { nextChar(); return; } nextChar(); } } } } /** * Moves cursor past a line comment. */ private void skipLineComment() { while ((ch != CARRIAGE_RETURN) && (ch != LINE_FEED)) { if (endReached) { return; } nextChar(); } } /** * Moves cursor past a block comment. */ private void skipBlockComment() { while (true) { if (endReached) { return; } if (ch == "*") { nextChar(); if (ch == "/") { nextChar(); return; } } else nextChar(); } } /** * Renders a new line character, provided previously rendered character * is not a newline. */ private void renderNewLine() { if (lastAppend != "\n" && lastAppend != "\r") { append("\n"); } } /** * Moves cursor past white space (including newlines). */ private void skipWhiteSpace() { if (ch == LINE_FEED || ch == CARRIAGE_RETURN) { renderNewLine(); } else { append(ch); } nextChar(); while (ch == LINE_FEED || ch == CARRIAGE_RETURN || ch == SPACE || ch == TAB) { if (ch == LINE_FEED || ch == CARRIAGE_RETURN) { renderNewLine(); } nextChar(); } }
}
</source>
Escape and unescape javascript code
<source lang="java">
/*
* Copyright 2005 Joe Walker * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */
import java.util.Arrays; import java.util.Locale; import java.util.SortedSet; import java.util.TreeSet; /**
* Various Javascript code utilities. * The escape classes were taken from jakarta-commons-lang which in turn * borrowed from Turbine and other projects. The list of authors below is almost * certainly far too long, but I"m not sure who really wrote these methods. * @author Joe Walker [joe at getahead dot ltd dot uk] * @author Henri Yandell * @author Alexander Day Chaffee * @author Antony Riley * @author Helge Tesgaard * @author Sean Brown * @author Gary Gregory * @author Phil Steitz * @author Pete Gieser */
public class JavascriptUtil {
/***
Escapes the characters in a String
using JavaScript String rules.
Escapes any values it finds into their JavaScript String form. * Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.)
**
So a tab becomes the characters "\\"
and
* "t"
.
**
The only difference between Java strings and JavaScript strings * is that in JavaScript, a single quote must be escaped.
**
Example: *
* input string: He didn"t say, "Stop!" * output string: He didn\"t say, \"Stop!\" **
*
* @param str String to escape values in, may be null
* @return String with escaped values, null
if null string input
*/
public static String escapeJavaScript(String str)
{
if (str == null)
{
return null;
}
StringBuffer writer = new StringBuffer(str.length() * 2);
int sz = str.length();
for (int i = 0; i < sz; i++)
{
char ch = str.charAt(i);
// handle unicode
if (ch > 0xfff)
{
writer.append("\\u");
writer.append(hex(ch));
}
else if (ch > 0xff)
{
writer.append("\\u0");
writer.append(hex(ch));
}
else if (ch > 0x7f)
{
writer.append("\\u00");
writer.append(hex(ch));
}
else if (ch < 32)
{
switch (ch)
{
case "\b":
writer.append("\\");
writer.append("b");
break;
case "\n":
writer.append("\\");
writer.append("n");
break;
case "\t":
writer.append("\\");
writer.append("t");
break;
case "\f":
writer.append("\\");
writer.append("f");
break;
case "\r":
writer.append("\\");
writer.append("r");
break;
default:
if (ch > 0xf)
{
writer.append("\\u00");
writer.append(hex(ch));
}
else
{
writer.append("\\u000");
writer.append(hex(ch));
}
break;
}
}
else
{
switch (ch)
{
case "\"":
// If we wanted to escape for Java strings then we would
// not need this next line.
writer.append("\\");
writer.append("\"");
break;
case """:
writer.append("\\");
writer.append(""");
break;
case "\\":
writer.append("\\");
writer.append("\\");
break;
default:
writer.append(ch);
break;
}
}
}
return writer.toString();
}
/**
* Returns an upper case hexadecimal String
for the given
* character.
* @param ch The character to convert.
* @return An upper case hexadecimal String
*/
private static String hex(char ch)
{
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
/**
* Unescapes any JavaScript literals found in the String
.
For example, it will turn a sequence of "\"
and "n"
* into a newline character, unless the "\"
is preceded by another
* "\"
.
* @param str theString
to unescape, may be null * @return A new unescapedString
,null
if null string input */ public static String unescapeJavaScript(String str) { if (str == null) { return null; } StringBuffer writer = new StringBuffer(str.length()); int sz = str.length(); StringBuffer unicode = new StringBuffer(4); boolean hadSlash = false; boolean inUnicode = false; for (int i = 0; i < sz; i++) { char ch = str.charAt(i); if (inUnicode) { // if in unicode, then we"re reading unicode // values in somehow unicode.append(ch); if (unicode.length() == 4) { // unicode now contains the four hex digits // which represents our unicode character try { int value = Integer.parseInt(unicode.toString(), 16); writer.append((char) value); unicode.setLength(0); inUnicode = false; hadSlash = false; } catch (NumberFormatException nfe) { throw new IllegalArgumentException("Unable to parse unicode value: " + unicode + " cause: " + nfe); } } continue; } if (hadSlash) { // handle an escaped value hadSlash = false; switch (ch) { case "\\": writer.append("\\"); break; case "\"": writer.append("\""); break; case "\"": writer.append("""); break; case "r": writer.append("\r"); break; case "f": writer.append("\f"); break; case "t": writer.append("\t"); break; case "n": writer.append("\n"); break; case "b": writer.append("\b"); break; case "u": // uh-oh, we"re in unicode country.... inUnicode = true; break; default: writer.append(ch); break; } continue; } else if (ch == "\\") { hadSlash = true; continue; } writer.append(ch); } if (hadSlash) { // then we"re in the weird case of a \ at the end of the // string, let"s output it anyway. writer.append("\\"); } return writer.toString(); } /** * Check to see if the given word is reserved or a bad idea in any known * version of JavaScript. * @param name The word to check * @return false if the word is not reserved */ public static boolean isReservedWord(String name) { return reserved.contains(name); } /** * The array of javascript reserved words */ private static final String[] RESERVED_ARRAY = new String[] { // Reserved and used at ECMAScript 4 "as", "break", "case", "catch", "class", "const", "continue", "default", "delete", "do", "else", "export", "extends", "false", "finally", "for", "function", "if", "import", "in", "instanceof", "is", "namespace", "new", "null", "package", "private", "public", "return", "super", "switch", "this", "throw", "true", "try", "typeof", "use", "var", "void", "while", "with", // Reserved for future use at ECMAScript 4 "abstract", "debugger", "enum", "goto", "implements", "interface", "native", "protected", "synchronized", "throws", "transient", "volatile", // Reserved in ECMAScript 3, unreserved at 4 best to avoid anyway "boolean", "byte", "char", "double", "final", "float", "int", "long", "short", "static", // I have seen the following list as "best avoided for function names" // but it seems way to all encompassing, so I"m not going to include it /* "alert", "anchor", "area", "arguments", "array", "assign", "blur", "boolean", "button", "callee", "caller", "captureevents", "checkbox", "clearinterval", "cleartimeout", "close", "closed", "confirm", "constructor", "date", "defaultstatus", "document", "element", "escape", "eval", "fileupload", "find", "focus", "form", "frame", "frames", "getclass", "hidden", "history", "home", "image", "infinity", "innerheight", "isfinite", "innerwidth", "isnan", "java", "javaarray", "javaclass", "javaobject", "javapackage", "length", "link", "location", "locationbar", "math", "menubar", "mimetype", "moveby", "moveto", "name", "nan", "navigate", "navigator", "netscape", "number", "object", "onblur", "onerror", "onfocus", "onload", "onunload", "open", "opener", "option", "outerheight", "outerwidth", "packages", "pagexoffset", "pageyoffset", "parent", "parsefloat", "parseint", "password", "personalbar", "plugin", "print", "prompt", "prototype", "radio", "ref", "regexp", "releaseevents", "reset", "resizeby", "resizeto", "routeevent", "scroll", "scrollbars", "scrollby", "scrollto", "select", "self", "setinterval", "settimeout", "status", "statusbar", "stop", "string", "submit", "sun", "taint", "text", "textarea", "toolbar", "top", "tostring", "unescape", "untaint", "unwatch", "valueof", "watch", "window", */ }; /** * The list of reserved words */ private static SortedSet<String> reserved = new TreeSet<String>(); /** * For easy access ... */ static { // The Javascript reserved words array so we don"t generate illegal javascript reserved.addAll(Arrays.asList(RESERVED_ARRAY)); }
}
</source>
Execute Javascript script in a file
<source lang="java">
import java.io.FileReader; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class RunScriptFileDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); try { FileReader reader = new FileReader("yourFile.js"); engine.eval(reader); reader.close(); } catch (Exception e) { e.printStackTrace(); } }
} /* File: yourFile.js
* function add(a, b) { c = a + b; return c;
} result = add (10, 5); print ("Result = " + result);
- /
</source>
Executing Scripts from Java Programs
<source lang="java">
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException;
public class ScriptExecutionDemo {
public static void main(String[] args) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine jsEngine = manager.getEngineByExtension("js"); jsEngine.eval("println ("Hello! JavaScript executed from a Java program.")"); }
}
</source>
Get a ScriptEngine by MIME type
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class GetEngineByMimeDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); /* Retrieve a ScriptEngine that supports the text/javascript MIME type */ ScriptEngine jsEngine = manager.getEngineByMimeType("text/javascript"); if (!(jsEngine == null)) { System.out.println("text/javascript MIME type retrieved:" + jsEngine); } ScriptEngine jsEngine2 = manager.getEngineByMimeType("text/vbscript"); if (jsEngine2 == null) System.out.println("\nNo supported script engine found for text/vbscript MIME type."); }
}
</source>
Get Script engine by extension name
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class GetEngineByExtensionDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); /* Retrieve a ScriptEngine that supports scripts with .js extension */ ScriptEngine jsEngine = manager.getEngineByExtension("js"); System.out.println(jsEngine); }
}
</source>
Get the value in JavaScript from Java Code by reference the variable name
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class RunJavaScript {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); try { engine.put("name", "abcde"); engine.eval("var output = "";for (i = 0; i <= name.length; i++) {" + " output = name.charAt(i)+"-" + output" + "}"); String name = (String) engine.get("output"); System.out.println(name); } catch (ScriptException e) { System.err.println(e); } }
} //-e-d-c-b-a-
</source>
Invoke an function
<source lang="java">
import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class InvocableTest {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); try { engine.eval("function myFunction(name){var output = "";" + " for (i = 0; i <= name.length; i++) {output = name.charAt(i)+"-"+ output" + " } return output;}"); Invocable invokeEngine = (Invocable) engine; Object o = invokeEngine.invokeFunction("myFunction", "abcde"); System.out.println(o); } catch (NoSuchMethodException e) { System.err.println(e); } catch (ScriptException e) { System.err.println(e); } }
}
</source>
Java Language Binding with JavaScript
<source lang="java">
//The Rhino scripting engine of Java SE 6 allows you to use the Java programming language in scripts. importPackage(javax.swing); importPackage(java.lang); importPackage(java.awt.event); jFrame1 = new JFrame("Greeting"); jLabel1 = new JLabel("Name:"); jTextField1 = JTextField(); jLabel2 = new JLabel(); jButton1 = new JButton("Click"); jFrame1.setSize(400, 400); listener1 = {
actionPerformed:function(e) { jLabel2.setText("Hello "+jTextField1.getText()+ " !"); }
} alistener = new ActionListener(listener1); jButton1.addActionListener(alistener); jFrame1.getContentPane().setLayout(null); jFrame1.getContentPane().add(jLabel1); jFrame1.getContentPane().add(jTextField1); jFrame1.getContentPane().add(jLabel2); jFrame1.getContentPane().add(jButton1); jLabel1.setBounds(10, 50, 40, 20); jTextField1.setBounds(50, 50, 220, 20); jLabel2.setBounds(10, 100, 220, 20); jButton1.setBounds(280, 50, 120, 23); jFrame1.setDefaultCloseOperation(jFrame1.EXIT_ON_CLOSE); jFrame1.setVisible(true); for(;;) { }
</source>
Listing All Script Engines
<source lang="java">
import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class ListEngineFactoryDemo {
public static void main(String[] args) { // create ScriptEngineManager ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factoryList = manager.getEngineFactories(); for (ScriptEngineFactory factory : factoryList) { System.out.println(factory.getEngineName()); System.out.println(factory.getLanguageName()); } }
} //Mozilla Rhino //ECMAScript
</source>
List the script engines
<source lang="java">
import java.util.List; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class ListEngines {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory : factories) { System.out.println(factory.getEngineName()); System.out.println(factory.getEngineVersion()); System.out.println(factory.getLanguageName()); System.out.println(factory.getLanguageVersion()); System.out.println(factory.getExtensions()); System.out.println(factory.getMimeTypes()); System.out.println(factory.getNames()); } }
} /*Mozilla Rhino 1.6 release 2 ECMAScript 1.6 [js] [application/javascript, application/ecmascript, text/javascript, text/ecmascript] [js, rhino, JavaScript, javascript, ECMAScript, ecmascript]
- /
</source>
Pass or retrieve values from a scripting engine (jdk1.6)
<source lang="java">
import java.util.Arrays; import java.util.List; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main {
public static void main(String[] args) throws Exception{ ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("javascript"); List<String> list1 = Arrays.asList("A", "B", "C", "D", "E"); engine.put("list1", list1); String jsCode = "var index; var values =list1.toArray();" + "println("Java to Javascript");for(index in values) {" + " println(values[index]);}"; engine.eval(jsCode); jsCode = "importPackage(java.util);var list2 = Arrays.asList(["A", "B", "C"]); "; engine.eval(jsCode); List<String> list2 = (List<String>) engine.get("list2"); for (String val : list2) { System.out.println(val); } }
}
</source>
Pass parameter to JavaScript through Java code
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class RunJavaScript {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); try { engine.put("name", "abcde"); engine.eval("var output = "";for (i = 0; i <= name.length; i++) {" + " output = name.charAt(i)+"-" + output" + "}"); String name = (String) engine.get("output"); System.out.println(name); } catch (ScriptException e) { System.err.println(e); } }
} //-e-d-c-b-a-
</source>
Read and execute a script source file
<source lang="java">
import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.Reader; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptExecutionReaderDemo {
public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine jsEengine = manager.getEngineByExtension("js"); Reader reader = new InputStreamReader(new FileInputStream("yourJavaScript.js")); jsEengine.eval(reader); }
} //File yourJavaScript.js /* importPackage(java.lang); function getName(name) {
if ((name != "")&&(name !=null)) { System.out.println("Hello "+name+"!") } else { System.out.println("Hello!") }
} getName("TOM");
- /
</source>
Retrieving Script Engines by Name
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class GetEngineByName {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); /* Retrieve a ScriptEngine registered with the rhino name */ ScriptEngine jsEngine = manager.getEngineByName("rhino"); if (!(jsEngine == null)) { System.out.println(jsEngine); } else { System.out.println("\nNo supported script engine foundregistered as Rhino."); } }
}
</source>
Retrieving the Metadata of Script Engines
<source lang="java">
import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class MetadataDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory : factories) { System.out.println("Full name = " + factory.getEngineName()); System.out.println("\nVersion = " + factory.getEngineVersion()); System.out.println("\nSupported language version = " + factory.getLanguageVersion()); } }
} /*Full name = Mozilla Rhino Version = 1.6 release 2 Supported language version = 1.6
- /
</source>
Retrieving the Registered Name of a Scripting Engine
<source lang="java">
import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class RegisteredNameDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory : factories) { List<String> regNames = factory.getNames(); for (int i = 0; i < regNames.size(); i++) { System.out.printf("Registered name " + i + " " + (String) regNames.get(i) + "\n"); } } }
}
</source>
Retrieving the Supported File Extensions of a Scripting Engine
<source lang="java">
import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager;
public class FileExtensionsDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory : factories) { List<String> ext = factory.getExtensions(); for (int i = 0; i < ext.size(); i++) { System.out.printf("Supported file extension: " + (String) ext.get(i) + "\n"); } } }
}
</source>
Retrieving the Supported Mime Types of a Scripting Engine
<source lang="java">
import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class MimeTypesDemo {
public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); List<ScriptEngineFactory> factories = manager.getEngineFactories(); for (ScriptEngineFactory factory : factories) { List<String> mimeTypes = factory.getMimeTypes(); for (int i = 0; i < mimeTypes.size(); i++) { System.out.printf("Supported MIME type " + i + " " + (String) mimeTypes.get(i) + "\n"); } } }
}
</source>
Run JavaScript and get the result by using Java
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class RunJavaScript {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); try { Double hour = (Double) engine.eval("var date = new Date();" + "date.getHours();"); String msg; if (hour < 10) { msg = "Good morning"; } else if (hour < 16) { msg = "Good afternoon"; } else if (hour < 20) { msg = "Good evening"; } else { msg = "Good night"; } System.out.println(hour); System.out.println(msg); } catch (ScriptException e) { System.err.println(e); } }
} /*10.0 Good afternoon
- /
</source>
Run Javascript function with ScriptEngine
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main {
public static void main(String[] argv) throws Exception { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("JavaScript"); String myJSCode = "function myFunction(){return (40 + 2);}myFunction();"; System.out.println(engine.eval(myJSCode)); }
}
</source>
Running Scripts with Java Script Engine
<source lang="java">
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class RunScriptDemo {
public static void main (String[] args) { ScriptEngineManager manager = new ScriptEngineManager (); ScriptEngine engine = manager.getEngineByName ("js"); String script = "print ("www.jexp.ru")"; try { engine.eval (script); } catch (ScriptException e) { e.printStackTrace(); } }
} //www.jexp.ru
</source>
Save the compiled JavaScript to CompiledScript object
<source lang="java">
import javax.script.rupilable; import javax.script.rupiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class CompileTest {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.put("counter", 0); if (engine instanceof Compilable) { Compilable compEngine = (Compilable) engine; try { CompiledScript script = compEngine.rupile("function count(){counter=counter+1;return counter;}; count();"); System.out.println(script.eval()); System.out.println(script.eval()); System.out.println(script.eval()); } catch (ScriptException e) { System.err.println(e); } } else { System.err.println("Engine can"t compile code"); } }
}
</source>
Use an external file containing the javascript code
<source lang="java">
import java.io.InputStreamReader; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main {
public static void main(String[] args) throws Exception{ ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("javascript"); engine.eval(new InputStreamReader (Main.class.getResourceAsStream("s.js"))); List <String> list1 = (List <String>)engine.get("list1"); if (list1 != null) { for (String s : (List<String>) list1) { System.out.println(s); } } 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); } } } }
}
</source>
Use an external file containing the javascript code. The .JS file is loaded from the classpath.
<source lang="java">
import java.io.InputStreamReader; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main {
public static void main(String[] args) throws Exception { ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("javascript"); engine.eval(new InputStreamReader(Main.class.getResourceAsStream("scripting.js"))); List<String> list1 = (List<String>) engine.get("list1"); if (list1 != null) { for (String s : (List<String>) list1) { System.out.println(s); } } 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); } } }
}
</source>
Use Java scripting engine
<source lang="java">
import java.util.List; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class Main {
public static void main(String[] args) throws Exception { ScriptEngineManager mgr = new ScriptEngineManager(); List<ScriptEngineFactory> engines = mgr.getEngineFactories(); for (ScriptEngineFactory engine : engines) { System.out.println(engine.getEngineName()); for (String n : engine.getNames()) { System.out.println("Short name : " + n); } } }
}
</source>
Use Java scripting engine (JDK 1.6)
<source lang="java">
import java.util.List; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; public class Main {
public static void main(String[] args)throws Exception { ScriptEngineManager mgr = new ScriptEngineManager(); List<ScriptEngineFactory> engines = mgr.getEngineFactories(); for (ScriptEngineFactory engine : engines) { System.out.println(engine.getEngineName()); for (String n : engine.getNames()) { System.out.println("Short name : " + n); } } ScriptEngine engine = mgr.getEngineByName("JavaScript"); String myJSCode = "function myFunction(){return (4+2);}myFunction();"; System.out.println(engine.eval(myJSCode)); }
}
</source>
Using Java Objects in JavaScript
<source lang="java">
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException;
public class JavaObjectDemo {
public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine jsEngine; jsEngine = manager.getEngineByExtension("js"); jsEngine.eval("importPackage(javax.swing);var optionPane =JOptionPane.showMessageDialog(null, "Hello!);"); }
}
</source>
Using thread to run JavaScript by Java
<source lang="java">
import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class InterfaceTest {
public static void main(String args[]) throws Exception{ ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.eval("function run() {print("www.jexp.ru");}"); Invocable invokeEngine = (Invocable) engine; Runnable runner = invokeEngine.getInterface(Runnable.class); Thread t = new Thread(runner); t.start(); t.join(); }
}
</source>
Utility to take xml string and convert it to a javascript based tree within html.
<source lang="java">
/*
* JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */
import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import java.util.Iterator; import java.util.List; /**
* Utility to take xml string and convert it to a javascript based tree within html. * * @author </p>"; } private static String convertEjbModule(Document jndiXml) { StringBuffer html = new StringBuffer(); Element jndiRoot = jndiXml.getRootElement(); List ejbModules = jndiRoot.elements("ejbmodule"); int globalCounter = 0; if (ejbModules.size() > 0) { html.append(createTreeCommandLinks("ejbTree")); // create tree and add root node html.append("<script type=\"text/javascript\">\n\n</script>"); }
return html.toString(); } private static int buildTree(Element ejbElm, String[] searchNames, StringBuffer html, int globalCounter, int parentId, String treeName) { if (searchNames != null) { for (int x = 0; x < searchNames.length; x++) { String searchName = searchNames[x]; List contextElms = ejbElm.elements(searchName); Iterator elmItr = contextElms.iterator(); while (elmItr.hasNext()) { Element contextElm = (Element) elmItr.next(); String name = ""; String type = ""; String typeValue = ""; // check for context name Element nameElm = contextElm.element("name"); if (nameElm != null) { name = nameElm.getText(); } Element attrElem = contextElm.element("attribute"); if (attrElem != null) { type = attrElem.attributeValue("name"); typeValue = attrElem.getText(); } //html.append("treeName.add(" + globalCounter++ + ", " + parentId + ", "" + name + " -- " + type + "[" + typeValue + "]");"); html.append(add(treeName, globalCounter++, parentId, name + " -- " + type + "[" + typeValue + "]")); // now recurse globalCounter = buildTree(contextElm, searchNames, html, globalCounter, globalCounter - 1, treeName); } } } return globalCounter; } private static String add(String tree, int global, int parent, String name) { return tree + ".add(" + global + ", " + parent + ", "" + name + "");\n"; }
public static void main(String[] args) { String xml = "<jndi>\n" + "\t<ejbmodule>\n" + "\t\t<file>null</file>\n" + "\t\t<context>\n" + "\t\t\t<name>java:comp</name>\n" + "\t\t\t<attribute name=\"bean\">MEJB</attribute>\n" + "\t\t\t<context>\n" + "\t\t\t\t<name>env</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t\t<leaf>\n" + "\t\t\t\t\t<name>Server-Name</name>\n" + "\t\t\t\t\t<attribute name=\"class\">java.lang.String</attribute>\n" + "\t\t\t\t</leaf>\n" + "\t\t\t</context>\n" + "\t\t</context>\n" + "\t</ejbmodule>\n" + "\t<context>\n" + "\t\t<name>java:</name>\n" + "\t\t<leaf>\n" + "\t\t\t<name>XAConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyXAConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>DefaultDS</name>\n" + "\t\t\t<attribute name=\"class\">javax.sql.DataSource</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>SecurityProxyFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.security.SubjectSecurityProxyFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>DefaultJMSProvider</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.jms.jndi.JBossMQProvider</attribute>\n" + "\t\t</leaf>\n" + "\t\t<context>\n" + "\t\t\t<name>comp</name>\n" + "\t\t\t<attribute name=\"class\">javax.naming.Context</attribute>\n" + "\t\t</context>\n" + "\t\t<leaf>\n" + "\t\t\t<name>ConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>JmsXA</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.resource.adapter.jms.JmsConnectionFactoryImpl</attribute>\n" + "\t\t</leaf>\n" + "\t\t<context>\n" + "\t\t\t<name>jaas</name>\n" + "\t\t\t<attribute name=\"class\">javax.naming.Context</attribute>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>JmsXARealm</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.security.plugins.SecurityDomainContext</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>jbossmq</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.security.plugins.SecurityDomainContext</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>HsqlDbRealm</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.security.plugins.SecurityDomainContext</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t</context>\n" + "\t\t<context>\n" + "\t\t\t<name>timedCacheFactory</name>\n" + "\t\t\t<attribute name=\"class\">javax.naming.Context</attribute>\n" + "\t\t\t<error>\n" + "\t\t\t\t<message>Failed to list contents of: timedCacheFactory, errmsg=null</message>\n" + "\t\t\t</error>\n" + "\t\t</context>\n" + "\t\t<leaf>\n" + "\t\t\t<name>TransactionPropagationContextExporter</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.tm.TransactionPropagationContextFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>Mail</name>\n" + "\t\t\t<attribute name=\"class\">javax.mail.Session</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>StdJMSPool</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.jms.asf.StdServerSessionPoolFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>TransactionPropagationContextImporter</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.tm.TransactionPropagationContextImporter</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>TransactionManager</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.tm.TxManager</attribute>\n" + "\t\t</leaf>\n" + "\t</context>\n" + "\t<context>\n" + "\t\t<name>Global</name>\n" + "\t\t<context>\n" + "\t\t\t<name>jmx</name>\n" + "\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t<context>\n" + "\t\t\t\t<name>invoker</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t\t<leaf>\n" + "\t\t\t\t\t<name>RMIAdaptor</name>\n" + "\t\t\t\t\t<attribute name=\"class\">$Proxy38</attribute>\n" + "\t\t\t\t</leaf>\n" + "\t\t\t</context>\n" + "\t\t\t<context>\n" + "\t\t\t\t<name>rmi</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t\t<link-ref>\n" + "\t\t\t\t\t<name>RMIAdaptor</name>\n" + "\t\t\t\t\t<link>jmx/invoker/RMIAdaptor</link>\n" + "\t\t\t\t\t<attribute name=\"class\">javax.naming.LinkRef</attribute>\n" + "\t\t\t\t</link-ref>\n" + "\t\t\t</context>\n" + "\t\t</context>\n" + "\t\t<leaf>\n" + "\t\t\t<name>OIL2XAConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyXAConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>HTTPXAConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyXAConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>ConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>UserTransactionSessionFactory</name>\n" + "\t\t\t<attribute name=\"class\">$Proxy13</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>HTTPConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>XAConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyXAConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<context>\n" + "\t\t\t<name>invokers</name>\n" + "\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t<context>\n" + "\t\t\t\t<name>TCK3</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t\t<leaf>\n" + "\t\t\t\t\t<name>pooled</name>\n" + "\t\t\t\t\t<attribute name=\"class\">org.jboss.invocation.pooled.interfaces.PooledInvokerProxy</attribute>\n" + "\t\t\t\t</leaf>\n" + "\t\t\t\t<leaf>\n" + "\t\t\t\t\t<name>jrmp</name>\n" + "\t\t\t\t\t<attribute name=\"class\">org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy</attribute>\n" + "\t\t\t\t</leaf>\n" + "\t\t\t\t<leaf>\n" + "\t\t\t\t\t<name>http</name>\n" + "\t\t\t\t\t<attribute name=\"class\">org.jboss.invocation.http.interfaces.HttpInvokerProxy</attribute>\n" + "\t\t\t\t</leaf>\n" + "\t\t\t</context>\n" + "\t\t</context>\n" + "\t\t<leaf>\n" + "\t\t\t<name>UserTransaction</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.tm.usertx.client.ClientUserTransaction</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>RMIXAConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyXAConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>UIL2XAConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyXAConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<context>\n" + "\t\t\t<name>queue</name>\n" + "\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>A</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>testQueue</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>ex</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>DLQ</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>D</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>C</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>B</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyQueue</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t</context>\n" + "\t\t<context>\n" + "\t\t\t<name>topic</name>\n" + "\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>testDurableTopic</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyTopic</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>testTopic</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyTopic</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>securedTopic</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jboss.mq.SpyTopic</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t</context>\n" + "\t\t<context>\n" + "\t\t\t<name>console</name>\n" + "\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t<leaf>\n" + "\t\t\t\t<name>PluginManager</name>\n" + "\t\t\t\t<attribute name=\"class\">$Proxy39</attribute>\n" + "\t\t\t</leaf>\n" + "\t\t</context>\n" + "\t\t<leaf>\n" + "\t\t\t<name>UIL2ConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>HiLoKeyGeneratorFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>RMIConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<context>\n" + "\t\t\t<name>ejb</name>\n" + "\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t<context>\n" + "\t\t\t\t<name>mgmt</name>\n" + "\t\t\t\t<attribute name=\"class\">org.jnp.interfaces.NamingContext</attribute>\n" + "\t\t\t\t<leaf>\n" + "\t\t\t\t\t<name>MEJB</name>\n" + "\t\t\t\t\t<attribute name=\"class\">$Proxy44</attribute>\n" + "\t\t\t\t</leaf>\n" + "\t\t\t</context>\n" + "\t\t</context>\n" + "\t\t<leaf>\n" + "\t\t\t<name>OIL2ConnectionFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.mq.SpyConnectionFactory</attribute>\n" + "\t\t</leaf>\n" + "\t\t<leaf>\n" + "\t\t\t<name>UUIDKeyGeneratorFactory</name>\n" + "\t\t\t<attribute name=\"class\">org.jboss.ejb.plugins.keygenerator.uuid.UUIDKeyGeneratorFactory</attribute>\n" + "\t\t</leaf>\n" + "\t</context>\n" + "</jndi>"; String html = null; try { html = XMLToHTMLTreeBuilder.convertJNDIXML(xml); } catch (DocumentException e) { e.printStackTrace(); } System.out.println("HTML output:\n\n" + html); }
}
</source>
Variables bound through ScriptEngine
<source lang="java">
import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class BindingDemo {
public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); engine.put("a", 1); engine.put("b", 5); Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); Object a = bindings.get("a"); Object b = bindings.get("b"); System.out.println("a = " + a); System.out.println("b = " + b); Object result = engine.eval("c = a + b;"); System.out.println("a + b = " + result); }
}
</source>
With Compilable interface you store the intermediate code of an entire script
<source lang="java">
import javax.script.rupilable; import javax.script.rupiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class CompilableDemo {
public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); Compilable jsCompile = (Compilable) engine; CompiledScript script = jsCompile.rupile("function hi () {print ("www.jexp.ru !"); }; hi ();"); for (int i = 0; i < 5; i++) { script.eval(); } }
} //www.jexp.ru !www.jexp.ru !www.jexp.ru !www.jexp.ru !www.jexp.ru !
</source>
Working with Compilable Scripts
<source lang="java">
import javax.script.rupilable; import javax.script.rupiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JDK6TabSample {
public static void main(String args[]) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.put("counter", 0); if (engine instanceof Compilable) { Compilable compEngine = (Compilable) engine; try { CompiledScript script = compEngine.rupile("function count(){counter=counter+1;return counter;}; count();"); System.out.println(script.eval()); System.out.println(script.eval()); System.out.println(script.eval()); } catch (ScriptException e) { System.err.println(e); } } else { System.err.println("Engine can"t compile code"); } }
} /*1.0 2.0 3.0*/
</source>