我有许多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。
看来这是进程打开的文件数量有问题。雄猫的类加载器打开了太多文件,因为每个应用程序/战争在他的剧目 WEB-INF/lib 中都有许多库。
当ClassLoader由于这个限制而无法打开java类文件时,它不会抛出任何异常:它只是不加载类。。。所以当我调用我的应用程序时,第一个被调用但没有加载的类是BaseUrlHelper。。。
我已经在 tomcat/lib 中放置了一些库(我已经从 WEB-INF/lib 中删除了它们),并且应用程序运行良好。如果您在 unix 系统中具有管理员访问权限,我看到命令 ulimit 也有一个东西..
您还可以将您的应用程序放在更多tomcat中。