2012-02-19 89 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的完整性。這些類型的問題可能只是冰山一角。