java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ScriptUtils в пакете osgi

ScriptEngineManager manager = new ScriptEngineManager(null);
ScriptEngine engine = manager.getEngineByName("nashorn");
BundleContext context = FrameworkUtil.getBundle(FormulaImpl.class).getBundleContext();
URL configURL = context.getBundle().getEntry("eval.txt");
if (configURL != null) {
    InputStream input = null;
    try {
        input = configURL.openStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        StringBuilder out = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            out.append(line);
        }
        engine.eval(out.toString());
    } catch (Exception e) {
        throw new RuntimeException(e.getMessage());
    } finally {
        try {
            input.close();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
}

Object obj = engine.get("formulaColumn");

В этом коде obj получается как массив объектов. Я не могу преобразовать в объект. В java 1.7 используется объект Rhino. я пробовал с

Object obj = (Object)ScriptUtils.convert(engine.get("formulaColumn"), Object.class);

Но ошибка calssDef не отображается в java 1.8

Я использую осги. Я экспортировал jdk.nashorn.api.scripting.ScriptUtils. Из моего jsfile я возвращаю массив.


person user6044627    schedule 06.09.2017    source источник
comment
Ваш вопрос плохо читается. NoClassDefFoundError означает, что у вас нет необходимого класса в вашем пути к классам, добавьте отсутствующий jar в свой путь сборки   -  person Mário Fernandes    schedule 06.09.2017
comment
Не могли бы вы опубликовать полный stackTrace? Кажется маловероятным, что вы пропустили класс ScriptUtils, так как он включен в JDK.   -  person Aaron    schedule 06.09.2017
comment
java.lang.NoClassDefFoundError: отображается ошибка jdk/nashorn/api/scripting/ScriptUtils. Я добавил jdk/nashorn/api/scripting/ScriptUtils. Но во время выполнения он не может получить.   -  person user6044627    schedule 06.09.2017
comment
В java 1.7 с использованием Rhino я получаю правильно. Объект obj = engine.get(formulaColumn);   -  person user6044627    schedule 06.09.2017
comment
Я также добавил jdk.nashorn.api.scripting.* в тег экспорта в pom.xml.   -  person user6044627    schedule 06.09.2017
comment
Глядя на эту статью об оракуле(прокрутите вниз до Встраивание раздела Oracle Nashorn), похоже, вы должны использовать классы из javax.script, а не jdk.nashorn.api.scripting   -  person Aaron    schedule 06.09.2017
comment
я использую javax.script.   -  person user6044627    schedule 06.09.2017
comment
Объект obj = engine.get(formulaColumn); // получение массива объектов в nashorn (java 1.8) Для получения объекта я пытался использовать Object obj = (Object)ScriptUtils.convert(engine.get(formulaColumn), Object.class); Эта ошибка броска строки, такая как класс Nodef, найдена   -  person user6044627    schedule 06.09.2017
comment
Я использую осги. Я экспортирую jdk.nashorn.api.scripting. Тем не менее это не работает.   -  person user6044627    schedule 06.09.2017


Ответы (1)


Я думаю, вам не нужно использовать метод ScriptUtils.convert() в вашем java-коде, если вы возвращаете свои данные из java-скрипта следующим образом:

вернуть Java.to(данные,"java.lang.Object")

Надеюсь, это будет полезно.

person Shemeem    schedule 06.09.2017
comment
Спасибо, Шемим. Я добавил возвращаемый тип как Java.to(data,java.lang.Object) в файл js, и он работает. - person user6044627; 06.09.2017