Bind method call in JavaScript script in Java Scripting
java, javascript, scripting
Solution
- use `engine.createBindings()` to make a Bindings object;
put an object exposing your method into the bindings with some name:
Bindings b = engine.createBindings();
b.put("api", yourApiObject);
engine.setBindings(b, ScriptContext.ENGINE_SCOPE);
Then in JavaScript there'll be a global "api" object you can call:
api.method1( "foo", 14, "whatever" );
The facility is easy to use, but be careful with what you pass back and forth; it doesn't do that much to convert JavaScript types to Java types.
Problem
Suppose I have a Javascript file ``` function js_main(args){ /* some code */ var x = api_method1(some_argument); /* some code */ } ``` And I try to run it with `javax.scripting` the usual way ``` ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.eval(...); ``` Now the I'd like to handle the call to `api_method1` in Javascript with my Java class. I'd like to have some kind of mapping/binding of calls i.e. each time the script calls `api_method1(arg)` a method ``` public Object api_method1(Object arg){ ... } ``` (placed in the same class as the engine) would be called. Can I achieve this?