提问者:小点点

Tomcat 7 aleatory NoClassDefFoundError cxf BaseUrlHelper


我有许多CXF WS要部署(13场战争),有时其中一场会给我这个错误:

    java.lang.NoClassDefFoundError: org/apache/cxf/transport/servlet/BaseUrlHelper    
        org.apache.cxf.transport.servlet.ServletController.getBaseURL(ServletController.java:74)
        org.apache.cxf.transport.servlet.ServletController.updateDestination(ServletController.java:83)
        org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:196)
        org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
        org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
        org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:290)
        org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
        org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52

包含此类的jar在每个lib应用程序中:cxf-rt-transports-http-3.0.2.jar

当我重新加载一个不在tomcat管理器下工作的人时,我不再有问题了,当我重新启动服务器时,它会再次出现(在另一场战争中随机出现)。缺少的类总是一样的。

我使用 Cxf 版本 3.0.2。


共1个答案

匿名用户

看来这是进程打开的文件数量有问题。雄猫的类加载器打开了太多文件,因为每个应用程序/战争在他的剧目 WEB-INF/lib 中都有许多库。

当ClassLoader由于这个限制而无法打开java类文件时,它不会抛出任何异常:它只是不加载类。。。所以当我调用我的应用程序时,第一个被调用但没有加载的类是BaseUrlHelper。。。

我已经在 tomcat/lib 中放置了一些库(我已经从 WEB-INF/lib 中删除了它们),并且应用程序运行良好。如果您在 unix 系统中具有管理员访问权限,我看到命令 ulimit 也有一个东西..

您还可以将您的应用程序放在更多tomcat中。