首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WildFly中找不到纳什霍恩类

在WildFly中找不到纳什霍恩类
EN

Stack Overflow用户
提问于 2014-06-29 17:19:04
回答 2查看 4K关注 0票数 2

我需要从运行在WildFly中的web应用程序中的nashorn访问一个内部类。

以下代码在我的机器上运行良好:

代码语言:javascript
复制
public class NashornTest {
    public static void main(String[] args) throws ClassNotFoundException {
        Class<?> cls = Class.forName("jdk.nashorn.internal.objects.ScriptFunctionImpl");
        System.out.println(cls);
    }
}

但是,当我在ClassNotFoundException中运行时,下面的servlet将抛出一个WildFly:

代码语言:javascript
复制
@WebServlet("/nashorn")
public class NashornServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Class<?> cls = null;
        try {
            cls = Class.forName("jdk.nashorn.internal.objects.ScriptFunctionImpl");
        } catch (ClassNotFoundException e) {
            throw new ServletException(e);
        }
    }
}

以下是服务器日志:https://gist.github.com/csokol/b81633bdbfa09bb55e2b

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 10:45:42

看起来在nashorn使用的所有包/类中都有一个疏忽。

您需要打开WILDFLY_HOME/modules/system/layers/base/sun/jdk/main/module.xml文件并添加

代码语言:javascript
复制
<path name="jdk/nashorn/api/scripting"/>
<path name="jdk/nashorn/api/scripting/resources"/>
<path name="jdk/nashorn/internal/codegen"/>
<path name="jdk/nashorn/internal/codegen/types"/>
<path name="jdk/nashorn/internal/ir"/>
<path name="jdk/nashorn/internal/ir/annotations"/>
<path name="jdk/nashorn/internal/ir/debug"/>
<path name="jdk/nashorn/internal/ir/visitor"/>
<path name="jdk/nashorn/internal/lookup"/>
<path name="jdk/nashorn/internal/objects"/>
<path name="jdk/nashorn/internal/objects/annotations"/>
<path name="jdk/nashorn/internal/parser"/>
<path name="jdk/nashorn/internal/runtime"/>
<path name="jdk/nashorn/internal/runtime/arrays"/>
<path name="jdk/nashorn/internal/runtime/linker"/>
<path name="jdk/nashorn/internal/runtime/options"/>
<path name="jdk/nashorn/internal/runtime/regexp"/>
<path name="jdk/nashorn/internal/runtime/regexp/joni"/>
<path name="jdk/nashorn/internal/runtime/resources"/>
<path name="jdk/nashorn/internal/runtime/resources/fx"/>
<path name="jdk/nashorn/internal/runtime/scripts"/>
<path name="jdk/nashorn/internal/tools"/>
<path name="jdk/nashorn/internal/tools/resources"/>
<path name="jdk/internal/dynalink"/>
<path name="jdk/internal/dynalink/beans"/>
<path name="jdk/internal/dynalink/linker"/>
<path name="jdk/internal/dynalink/support"/>

以及可能丢失的任何其他路径/包。

作为参考,此文件在8.x 分支中的外观如下

我还创建了拉请求来修复WildFly 主控8.x分支机构中的这个问题。

票数 2
EN

Stack Overflow用户

发布于 2014-06-30 03:10:44

当在具有Java平台默认安全策略(或兼容扩展)的安全管理器下运行时,jdk.nashorn.inal.*中的任何类都是“特权”的,因此,除非特别允许调用者访问(请参见package.access属性$JDK/jre/lib/ security /java.security文件)。另外,从名称中可以看到,这个类是内部的。如果您能够详细说明用例(即您为什么需要访问ScriptFunctionImpl),我们可能会提出一种不同的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24478436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档