JS脚本不能在Java 11上运行,但能在Java 8上运行
原学程将引见JS剧本不克不及在Java 一一上运转,但是能在Java 8上运转的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。
成绩描写
我有1个JS剧本,它在应用JDK 8运转时运转患上很佳,但是在Java 一一上掉败并涌现毛病。
毛病为:
unknown call type GET:PROPERTY|ELEMENT|METHOD:NODE_PATH(Object)int@jdk.nashorn.internal.scripts.Script$Recompilation$二0$一一六七8$^eval_
Java代码:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(evalCode);
Invocable invocable = (Invocable) engine;
invocable.invokeFunction("__toCall");
剧本代码:
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 result;
})();
}
);
}
推举谜底
这听起去能够是JDK⑻二六一九二六毛病。佳新闻是,这个成绩曾经修复,但是只在standalone Nashorn中修复,而没有是散成到Java 一一中的。借有1个page描写怎样保证您的法式应用自力的Nashorn,而没有是Java 一一上的散成Nashorn。
佳了闭于JS剧本不克不及在Java 一一上运转,但是能在Java 8上运转的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。