我的项目存在问题,经过一些测试后,我认为它与源无关。即使回到以前工作的版本,当我尝试部署到Tomcat时仍然会出错。
错误是org.springframework.beans.factory.BeanDefinitionStoreException
由java.lang.ClassFormatError
引起,消息截断的类文件。
我已经开始通过从等式中删除Eclipse来缩小问题,但即使使用maven命令行构建并直接部署到我的tomcat实例,我仍然会遇到同样的问题。人们建议清除tomcat工作和临时目录,谷歌搜索错误,我没有运气。
我知道这不是很多信息,但假设问题不在我的代码中,对我的系统进行哪些更改可能导致此问题突然显现?
堆栈跟踪
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.ClassFormatError: Truncated class file
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:239)
... 54 more
Caused by: java.lang.ClassFormatError: Truncated class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.loadClass(XBeanQNameHelper.java:102)
at org.apache.xbean.spring.context.v2c.XBeanQNameHelper.getBeanInfo(XBeanQNameHelper.java:72)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.getPropertyDescriptor(XBeanNamespaceHandler.java:581)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.addAttributeProperties(XBeanNamespaceHandler.java:333)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:225)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:276)
at org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:156)
at org.apache.xbean.spring.context.v2.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:49)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
... 59 more
答案 0 :(得分:5)
看起来其中一个类文件已损坏,但问题是找到哪一个。
调试此方法的一种方法是使用eclipse的break on exception feature。启动tomcat以便等待debugger to attach before running,然后中断抛出的java.lang.ClassFormatError,并查看eclipse中的局部变量和堆栈,看看哪个类无法加载。
答案 1 :(得分:4)
如果您正在运行JSP,只需进入您的TOMCAT_HOME / work / Catalina / localhost /目录,查找您的webapp的名称,然后进入该目录并从目录树一直向下,直到找到JSP类文件.. sudo rm -f *然后再试一次。
无需重新安装所有内容或重建任何内容,您所做的一切都是腐败的......有时编译器会感到困惑。
答案 2 :(得分:0)
有一个像这样的问题。所有Web应用程序都会抛出相同的异常,并且它们不会全部被破坏。还尝试删除并重新部署战争,检查磁盘是否存在坏扇区等。最后通过删除并重新安装tomcat7来解决。
apt-get purge tomcat7
apt-get install tomcat7
根本原因仍然是一个谜。
答案 3 :(得分:0)
我尝试了很多来解决这个问题,但最后我发现它,它不是损坏的.class文件的问题。这个损坏的.class文件存储在本地服务器(Tomcat7等...)中。所以
快乐编码。
答案 4 :(得分:0)
我删除了目标文件夹并进行了清理编译,现在一切正常。
答案 5 :(得分:0)
问题是包含类文件的类文件/ jar已损坏的问题。找到您遇到此错误的类的包。如果你的文件,清理和重建,它应该解决问题。如果问题是由于任何外部包,重新下载负载,它应该解决您的问题。
如果您正在使用maven删除本地m2存储库并重建。
答案 6 :(得分:0)
如果您正在处理的课程已损坏,则可能会发生此类错误。如果问题出在您正在处理的类上,只需执行干净的构建,问题就会得到解决。
如果错误是由于第三方JAR / API,在大多数情况下重新下载相同的内容将解决问题。
如果您使用的是构建工具/框架,则删除现有存储库并重新运行该工具。
答案 7 :(得分:0)
是的,我正在处理的上一个文件类可能会导致运行应用程序的问题我从主类中取消了该类文件并且现在工作正常。
答案 8 :(得分:0)
这个问题在这一点上已经相当陈旧,但我记得很清楚,尽管它已经是4年了。
在这种情况下,此问题的根本原因是我的磁盘因固件问题而损坏。在其他情况下,由于其他原因导致内存故障或磁盘故障,我发生过类似的事情。
我之后发布此内容的原因是我看到很多回复都有针对此问题的本地化解决方案。 YMMV和腐败可能在没有完全爆炸的磁盘或内存故障的情况下发生,但将此答案视为PSA。
如果您遇到此问题或类似问题,请花一些时间检查磁盘和RAM的完整性。这些类型的问题可能只是冰山一角。