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

人气:40 发布:2023-01-03 标签: java java-8 nashorn java-11

问题描述

我有一个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。

16