当前位置: 首页 > 知识库问答 >
问题:

JS脚本不使用Java 11运行,但可以使用Java 8

苏建安
2023-03-14

我有一个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 result;
            })();
        }
    );
     }

共有1个答案

丰俊艾
2023-03-14

这听起来像是JDK-8261926的bug。好消息是,这是固定的,但仅在独立的Nashorn中,而不是集成到Java 11中的Nashorn中。还有一个页面描述了如何确保程序使用独立的Nashorn,而不是Java 11上的集成Nashorn。

 类似资料:
  • 问题内容: 我有一个node.js脚本,需要在启动时启动 并 在www-data用户下运行。在开发期间,我始终使用以下命令启动脚本: 我确切地看到了发生了什么,manager.js现在运行良好。搜索所以我发现我不得不把它放在我的。另外,我学会了将输出指向日志文件,并将追加到“将stderr重定向到stdout”,它应该是守护程序,因此最后一个字符是。 最后,我的样子是这样的: 如果我自己运行此代码

  • 出于学习目的,我正在尝试在GCP上安装和设置我自己的Kubernetes集群。 我想在GCP上为我的实例提供一个引导脚本。 这是我的config 我在应用terraform时遇到了这个问题 错误:无法打开脚本“sudo apt get update” sudo apt-get安装 apt-transverage-https ca-证书 curl gnupg-Agent software-Prope

  • 问题内容: 我无法让npm工作。我的package.json文件有 我在与console.logs相同的文件夹中有一个build.js文件。 当我跑步 我得到错误 如果我移动build.js文件并更改package.json文件以包含一个子文件夹 然后我得到错误 怎么了 我正在复制示例文档。 问题答案: 要么 注意: 您缺少和节点命令 文件夹结构很好:

  • 我无法让npm工作。我的包裹。json文件已被删除 我有一个身材。js文件位于与控制台相同的文件夹中。日志。 当我奔跑时 我得到了错误 如果我移动建筑。js文件并更改我的包。json文件有一个子文件夹 那我就知道错误了 出什么问题了?我正在复制示例留档。

  • 问题内容: 我使用 hsqldb 运行需要数据库访问权限的单元测试。 目前,当我想为特定测试创建表时,我具有以下代码: 该方法检索在上下文中定义的DataSource : 现在,我想从一个SQL脚本创建表(当然,此脚本将包含多个表创建): 在HSQLDB文档中,我可以要求他在启动时运行脚本。但是,它不符合我的要求,因为我想在运行时运行脚本。 当然,我可以自己读取文件,并且对于每个SQL语句,我都运

  • 问题内容: 我已经准备好具有功能流程的Selenium自动化脚本,现在我想将这些脚本与JMeter集成以进行负载测试。 那可能吗? 如果是这样,如何将两者融合? 我的首要目标是使用硒运行自动化脚本,而不是在jmeter中运行这些脚本以进行负载或性能测试。 问题答案: JUnit请求采样器 如果您想重用已经自动化的(Java)Selenium场景,而不是为WebDriver Sampler重写JS脚