ScriptEngineManager.getEngineFactories не возвращает фабрики на appengine - PullRequest
4 голосов
/ 23 ноября 2011

Следующий код возвращает пустой массив.

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factories = manager.getEngineFactories();

Он работает в среде разработки, но не развернут.
Даже после добавления js.jar из rhino вПапка lib и добавление ее в classpath, EngineFactories не найдены.

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2013

GAE - это оптимизированная среда исполнения Java.Даже если ScriptEngineManager находится в белом списке поддерживаемых классов, для его работы остается еще один параметр.

Вам необходимо зарегистрировать службу Rhino, у меня есть подсказки для ее архивирования, но не совсем.Чтобы зарегистрировать сервис, вы должны создать файл 'META-INF / services / javax.script.ScriptEngineFactory' с одной строкой с точным именем класса Rhino, который реализует интерфейс ScriptEngineFactory.И моя проблема в том, что я не могу найти эти классы.

Если кто-то знает, пожалуйста, отредактируйте.

0 голосов
/ 09 февраля 2015

Да, Даниэль прав, вам нужно использовать другой движок JavaScript, такой как Rhino. Я поставил возможное решение по аналогичному вопросу (который основан на решении, заданном Harsha R ): https://stackoverflow.com/a/28408123/578821

...