У меня есть абстрактный класс, Problem
. Это пакет com.namespace.problem
. Мое приложение tomcat вызывает Problem.staticMethod()
на каждой странице. Я получаю ошибку 500, NoClassDefFoundError
на каждой странице. В отладчике я могу получить доступ к статическим полям от Problem
. Я могу успешно разместить точки останова по своим методам экземпляра. Он не может помещать точки останова на статические методы, и любой статический метод, который я вызываю, вызывает NoClassDefFoundError
.NoClassDefFoundError в Tomcat для абстрактного класса
Tomcat работает внутри контейнера Docker. Когда я запускаю контейнер докеров на моем локальном компьютере, проблем нет. Когда я запускаю его на своем экземпляре AWS, на каждой странице есть NoClassDefFoundError
.
Я прочитал, что должен искать ClassNotFoundException
или ExceptionInInitializerError
, но ничего не нашел.
Я не могу инициализировать проблему (как абстрактную). Я не вижу Problem.class
в отладчике, это также вызывает ошибку. Я не могу создавать экземпляры классов, которые расширяют Problem
, я получаю ту же ошибку.
Что может быть причиной этого? Точка докера должна быть независимой от платформы, поэтому я не знаю, почему это произойдет на AWS, но не на моем компьютере, я развертываю ту же WAR.
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class com.namespace.problem.Problem
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
org.apache.jsp.view.system.index_jsp._jspService(index_jsp.java:381)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
root cause
java.lang.NoClassDefFoundError: Could not initialize class com.namespace.problem.Problem
com.namespace.system.Application.setInitialState(Application.java:327)
com.namespace.system.Application.setInitialState(Application.java:296)
com.namespace.system.Application.setInitialState(Application.java:292)
com.namespace.mvc.controller.Controller.<init>(Controller.java:80)
com.namespace.mvc.controller.SystemController.<init>(SystemController.java:20)
org.apache.jsp.view.system.index_jsp._jspService(index_jsp.java:122)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
Является ли класс проблем одним из ваших, проведенным внутри войны в com/namespace/problem/Problem.class? Это пространство имен указано на ваших лицевых страницах через соответствующий импорт, чтобы вы могли ссылаться на него через Problem.staticMethod()? Можете ли вы получить доступ к любому другому объекту из ваших представлений на передней панели из той же войны? – ManoDestra
@ManoDestra это в пакете. И он импортируется правильно, и доступны все другие классы. Я нашел проблему. См. Мой ответ для глупого решения. – DontTurnAround