#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. Да, автономные работы. Я пошел в закрытую пресс-службу, и на самом деле это вы ее починили 🙂