Сценарий JS не запускается с Java 11, но работает с Java 8

#java #java-8 #java-11 #nashorn

Вопрос:

У меня есть сценарий JS, который отлично работает при запуске с использованием JDK 8, но завершается ошибкой на Java 11.

Ошибка в том, что:

  unknown call type GET:PROPERTY|ELEMENT|METHOD:NODE_PATH(Object)int@jdk.nashorn.internal.scripts.Script$Recompilation$20$11678$^eval_
 
 

Java-код:

 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(evalCode);
Invocable invocable = (Invocable) engine;
invocable.invokeFunction("__toCall");   
 

Код Javascript:

 function __toCall() {
    return require('./src/main/resources/ontology/nashorn-invoker')(
        function (require) {
            print('in nashornInvoker: require='   require);
            var Text = function Text() {
                StringLeaf.call(this);
            };
            Text.prototype.ontologyType = function () {
                return 'cmd.ontology.types.Text';
            };

            var BasicTest = function BasicTest() {
                var _field = new Text();
                _field._fieldName = 'field';
                _field._name = 'Field';
                _field._defaultValue = '';

                var curNode = this;
                Structure.call(this, {
                    field: _field
                });
            };
            BasicTest.prototype.ontologyType = function () {
                return 'cmd.ontology.test.BasicTest';
            };
            BasicTest.prototype._name = 'Basic Test';
            return (function () {
                var model = [];
                var callbackFn = function (result) {
                    if (result !== true) model.push.apply(model, result);
                };
                test.child('field').validate(vc, callbackFn);
                var result = model.length === 0 ? true : model;
                print('Callback function result: '   JSON.stringify(result));
                return resu<
            })();
        }
    );
     }
 

Комментарии:

1. (обратите внимание, что Nashorn устарел и был удален в Java 15)

Ответ №1:

Это звучит так, как будто это может быть ошибка JDK-8261926. Хорошей новостью является то, что это исправлено, но только в автономном Nashorn, а не в том, который интегрирован в Java 11. Там также есть страница, описывающая, как вы можете убедиться, что ваша программа использует автономный Nashorn вместо интегрированного в Java 11.

Комментарии:

1. Спасибо, это именно то, что я искал. Я надеюсь, что автономная версия будет работать.

2. Да, автономные работы. Я пошел в закрытую пресс-службу, и на самом деле это вы ее починили 🙂