Java Scripting Engine importing my classes does not work
-
01-10-2019 - |
Question
A code is worth 1000 words of explaining it :-)
package jasim;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JSTest {
public static void main(String[] args) throws ScriptException {
ScriptEngine jse = new ScriptEngineManager().getEngineByExtension("js");
jse.eval("println(new jasim.JSTest().toString)");
}
@Override
public String toString() {
return "JSTest Object";
}
}
This code will fail with the below exception:
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "jasim" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1
How do I import my own classes into the ScriptEngine?
Solution
After looking at the Mozilla Rhino docs, the solution is either to use:
importPackage(Packages.jasim)
within the script, or to use new Packages.jasim.JSTest()
This is not so clear in the Sun docs regarding the importPackage in the ScriptingEngine docs.
OTHER TIPS
The same way you import javax.script.ScriptEngine;
...
Just make sure your classes are in the CLASSPATH
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow