问题描述
我有一个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");
脚本代码:
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-8261926错误。好消息是,这个问题已经修复,但只在standalone Nashorn中修复,而不是集成到Java 11中的。还有一个page描述如何确保您的程序使用**的Nashorn,而不是Java 11上的集成Nashorn。
;