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

Nashhorn引擎在Java 11上失败,出现“未知调用类型”错误[重复]

席波娃
2023-03-14

我有一个JS脚本,当使用Java的Nashorn引擎进行评估时失败。此代码在Java8上运行良好,但在Java11上失败。我收到一个错误:

unknown call type GET:PROPERTY|ELEMENT|METHOD:NODE_PATH(Object)int@jdk.nashorn.internal.scripts.Script$Recompilation$20$11678$\^eval\_
   java.lang.AssertionError: unknown call type GET:PROPERTY|ELEMENT|METHOD:NODE_PATH(Object)int@jdk.nashorn.internal.scripts.Script$Recompilation$20$11678$\^eval\_
at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornBottomLinker.linkBean(NashornBottomLinker.java:126)
at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.linker.NashornBottomLinker.getGuardedInvocation(NashornBottomLinker.java:78)
     at jdk.dynalink/jdk.dynalink.linker.support.CompositeGuardingDynamicLinker.getGuardedInvocation(CompositeGuardingDynamicLinker.java:109)

代码为:

function __toCall() {
return require('nashorn-invoker')(
    function (require) {
        var Text = function Text() {
            StringLeaf.call(this);
        };
        extend(Text, StringLeaf);
        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
            });
        };
        extend(BasicTest, Structure);
        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;
        })();
    }
);

}

文件nashorn-invoker.js

 module.exports = function nashornInvoker(callback) {
      return callback(require); // runs the given callback and provide our "require" context
   };

共有1个答案

长孙骏
2023-03-14

这里也回答了类似的问题。

JS脚本不与Java11一起运行,但与Java8一起运行

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

 类似资料:
  • 我正在使用react-native-firebase与我们的Firebase帐户一起进行身份验证、firestore和存储。尝试将照片上载到存储区失败,出现未知错误。以下是尝试的代码: 在iOS模拟器中测试,并使用调试器检测错误,我只是返回了这个错误: https://github.com/invertase/react-native-firebase/issues/1177 https://gi

  • 直截了当地说,我的POM有问题。xml文件。 这是我的文件。 这是一个图像(请参见“问题”中的路径- 这是图像

  • 问题内容: 我对Go真的很陌生,su只在这里忍受我。我正在尝试使用以下代码编写将mysql数据加载到Redis集群的代码:redis-go- cluster , load2redis 这是代码。它有点长,请在这里忍受。 当我执行它时,出现以下异常: 有人可以向我解释我在做什么错吗?我将不胜感激。 问题答案: 如前所述,不适用于地图。这是您可以解决它的一种方法。 Do方法映射到Redis命令集,并且

  • 我的API远程托管,没有使用ssl证书! 我搜索了所有的解决方案,但没有一个解决我的问题

  • 我正在尝试编写一个android静态编程语言应用程序,但我得到了以下错误。我哪里出错了? 这是我如何声明我的HashMap: 错误: 类型推断失败。没有足够的信息来推断构造函数HashMap中的参数K。请明确说明