Вызов метода Bind в JavaScript script в Java Scripting
Предположим, что у меня есть файл Javascript
function js_main(args){
/* some code */
var x = api_method1(some_argument);
/* some code */
}
И я пытаюсь запустить его с javax.scripting
обычным способом
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval(...);
Теперь я хотел бы обработать вызов api_method1
в Javascript с моим классом Java. Я хотел бы иметь какое-то отображение/привязку вызовов, т.е. Каждый раз, когда script вызывает api_method1(arg)
метод
public Object api_method1(Object arg){ ... }
(помещенный в тот же класс, что и движок).
Могу ли я достичь этого?
Ответы
Ответ 1
- используйте
engine.createBindings()
, чтобы создать объект Bindings;
-
поместите объект, подвергая ваш метод привязкам с некоторым именем:
Bindings b = engine.createBindings();
b.put("api", yourApiObject);
engine.setBindings(b, ScriptContext.ENGINE_SCOPE);
-
Тогда в JavaScript будет глобальный объект "api", который вы можете вызвать:
api.method1( "foo", 14, "whatever" );
Объект прост в использовании, но будьте осторожны с тем, что вы проходите взад и вперед; он не делает так много, чтобы преобразовать типы JavaScript в типы Java.