JS脚本不能在Java 11上运行,但能在Java 8上运行

原学程将引见JS剧本不克不及在Java 一一上运转,但是能在Java 8上运转的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

JS脚本不能在Java 11上运行,但能在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上运转的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。