当我运行项目时,会收到此错误的大量输出:
2009年9月9日,上午8:22:23 org.apache.catalina.core.StandardWrapperValve调用
严重:Servlet Jersey的Servlet.service()抛出异常
java.lang.NoClassDefFoundError:无法初始化类SpringFactory
在com.point2.prospect.persistence.hibernate.HibernateTransactionInterceptor.doFilter(HibernateTrans
actionInterceptor.java:17)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在com.point2.prospect.restapi.ServerErrorInterceptor.doFilter(ServerErrorInterceptor.java:27)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:583)
在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447)
在java.lang.Thread.run(Thread.java:619)
我注意到此问题的出现方式是在整个网络上被询问,但没有真正的答案。这种错误的一般原因是什么?
最佳答案
NoClassDefFound错误是一个模糊的错误,通常隐藏着更严重的问题。它与ClassNotFoundException不同(当类不存在时抛出该异常)。
如javadocs所示,NoClassDefFound可能指示该类不存在,但是通常在类加载器为该类加载字节并在其上调用“defineClass”后抛出该类。还要仔细检查您的完整堆栈跟踪是否有其他线索或可能的“原因”异常(尽管您的特定回溯没有显示任何异常)。
当您遇到NoClassDefFoundError时,首先要看的是类的静态位,即在类定义期间发生的任何初始化。如果失败,则将抛出NoClassDefFoundError-应该抛出ExceptionInInitializerError并指出问题的详细信息,但以我的经验,这些很少见。它只会在第一次尝试定义类时执行ExceptionInInitializerError,之后将仅抛出NoClassDefFound。因此,请查看较早的日志。
因此,我建议您查看该HibernateTransactionInterceptor行中的代码,并查看其要求。似乎无法定义类SpringFactory。因此,也许可以检查该类中的初始化代码,这可能会有所帮助。
如果可以调试,则将其停在(17)的最后一行并进行调试,以便尝试查找导致异常的确切行。另外,请在日志中检查更高的位置,如果非常幸运,可能会出现ExceptionInInitializerError。