2012-02-19 93 views
4

我遇到了一个与我的项目有关的问题,经过一些测试后,我认为它没有与源相关。即使回到之前的工作版本,我仍然会在尝试部署到Tomcat时发生错误。Tomcat在启动时突然抛出一个ClassFormatError

错误是由java.lang.ClassFormatError造成的org.springframework.beans.factory.BeanDefinitionStoreException与消息截断的类文件

我已经开始通过从等式中删除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

你可以发布堆栈跟踪 – Sean 2012-02-19 05:27:59

回答

5

它看起来像类文件的一个已损坏,但问题是找到哪一个。

调试此方法的一种方法是使用eclipse的break on exception feature。启动tomcat,等待debugger to attach before running,然后中断抛出的java.lang.ClassFormatError,并查看eclipse中的局部变量和堆栈以查看哪些类无法加载。

+0

谢谢,我明天会试一试。为什么一个类文件即使在完成构建时也会一直受到损坏?也许有什么东西与我的artifactory。 – 2012-02-19 06:10:12

+0

它可能就像你的驱动器上的坏扇区一样简单...或者可能更复杂...但它很难针点... – havexz 2012-02-19 06:15:44

+1

是的我的本地maven回购中的activemq类文件以某种方式被损坏。从回购库中删除这些文件解决了问题。谢谢。 – 2012-02-19 15:15:49

0

有一个完全像这样的问题。所有Web应用程序都会抛出同样的异常,并且它们不能全部损坏。还尝试删除并重新部署战争,检查磁盘坏道等。最后通过删除并重新安装tomcat7进行修复。

apt-get purge tomcat7 
apt-get install tomcat7 

根本原因仍然是一个谜。

0

我尝试了很多来解决这个问题,但最后我发现它,它不是被损坏的.class文件的问题。这个损坏的.class文件存储在本地服务器(Tomcat7等)中。所以

  1. 请删除您的服务器。
  2. 清理您的项目(在菜单栏中:Prject - > clean)
  3. 将它再次添加到您的eclipse中。
  4. 项目清理并安装maven。
  5. 运行您的项目。

快乐编码。

4

如果您正在运行JSP,只需进入您的TOMCAT_HOME/work/Catalina/localhost /目录,查找您的web应用程序的名称,cd到目录树中,直到找到JSP类文件.. sudo rm -f *然后重试。

没有必要重新安装所有东西或重建任何东西,没有做任何事情是损坏的。有时编译器会感到困惑。

0

我删除了目标文件夹,并进行了清理编译,现在一切正常。

0

问题是你的类文件/包含类文件的jar已损坏。找到你得到这个错误的类的包。如果它的文件,清理和重建,它应该解决问题。如果问题是由于任何外部软件包,请重新下载并解决您的问题。

如果您使用的是maven,请删除您的本地m2存储库并重建。

0

如果您正在使用的类遭到破坏,则可能会发生此类错误。如果问题出在您正在处理的课程上,只需做一个干净的构建,问题就会得到解决。

如果错误是由于第三方JAR/API导致的,重新下载相同的代码将在大多数情况下解决问题。

如果您正在使用构建工具/框架,请删除现有存储库并重新运行该工具。

0

是的,最后一个文件类我正在处理这可能会导致问题运行应用程序我从主类没有调用该类文件,现在工作正常。

0

这个问题在这一点上很老,但我记得这个情况很清楚,尽管它在4年前。

在这种情况下,此问题的下层原因是由于固件问题导致我的磁盘损坏。由于内存故障或其他原因导致的磁盘故障,在其他情况下,我遇到过类似的情况。

我在这么长时间后发布这个帖子的原因是,我看到很多回复都有针对此问题的本地化解决方案。 YMMV和腐败可能发生没有全面的磁盘或内存故障,但认为这个答案是PSA。

如果遇到此问题或类似问题,请花些时间检查磁盘和RAM的完整性。这些类型的问题可能只是冰山一角。