Tomcat неожиданно выдает ClassFormatError при запуске - PullRequest
4 голосов
/ 19 февраля 2012

У меня проблема с моим проектом, и после некоторого тестирования я не думаю, что он связан с источником. Даже когда я возвращаюсь к ранее работающей ревизии, я все равно получаю сообщение об ошибке, когда пытаюсь выполнить развертывание в 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

Ответы [ 9 ]

5 голосов
/ 19 февраля 2012

Похоже, что один из файлов класса поврежден, но проблема в том, чтобы найти какой.

Одним из способов отладки является использование break в функции eclipse при исключении . Запустите tomcat, чтобы он ожидал присоединения отладчика , прежде чем запускать , затем разбейте на генерируемое java.lang.ClassFormatError и осмотрите локальные переменные и стек в eclipse, чтобы увидеть, какой класс не удается нагрузка.

4 голосов
/ 13 февраля 2016

Если вы работаете с JSP, просто перейдите в каталог TOMCAT_HOME / work / Catalina / localhost /, найдите имя вашего веб-приложения, перейдите в него и перейдите вниз по дереву каталогов, пока не найдете класс JSPфайлы .. sudo rm -f * и попробуйте снова.

Нет необходимости переустанавливать все или перестраивать что-либо, все, что вы делали, было повреждено ... иногда компилятор запутывается.

0 голосов
/ 28 сентября 2016

Этот вопрос довольно старый на данный момент, но я довольно четко помню ситуацию, несмотря на то, что это было 4 года назад.

Основной причиной этой проблемы в этом случае было то, что мой диск был поврежден из-запроблема прошивки.У меня подобные вещи случались со мной в других ситуациях из-за сбоев памяти или дисков по другим причинам.

Причина, по которой я публикую это после столь долгого времени, заключается в том, что я вижу много ответов, в которых есть локализованные решения.к этому вопросу.YMMV и повреждение могут произойти без полного отказа диска или сбоя памяти, но считайте этот ответ PSA.

Если вы столкнулись с этой проблемой или схожими проблемами, потратьте некоторое время на проверку целостности вашего диска и оперативной памяти.. Подобные проблемы могут быть лишь верхушкой айсберга.

0 голосов
/ 28 сентября 2016

Да, последний класс файлов, над которым я работаю, может вызвать проблемы с запуском приложения. Я вызвал этот файл класса из основного класса и теперь работает нормально.

0 голосов
/ 16 мая 2016

Такие ошибки могут возникать, если класс, над которым вы работаете, поврежден.Если проблема связана с классом, над которым вы работаете, просто выполните чистую сборку, и проблема будет решена.

Если ошибка вызвана сторонним JAR / API, повторная загрузка того жеВ большинстве случаев проблема решается.

Если вы используете инструмент сборки / каркас, удалите существующий репозиторий и перезапустите инструмент.

0 голосов
/ 16 мая 2016

Проблема в том, что ваш файл класса / jar, содержащий файл класса, поврежден. Найдите пакет, для какого класса вы получаете эту ошибку. Если это ваш файл, очистите и восстановите, это должно решить проблему. Если проблема связана с каким-либо внешним пакетом, повторно загрузите его, и это должно решить вашу проблему.

Если вы используете maven, удалите свой локальный репозиторий m2 и перестройте.

0 голосов
/ 25 апреля 2016

Я удалил целевую папку и сделал чистую компиляцию, и теперь все хорошо.

0 голосов
/ 28 октября 2015

Я много пытался выйти из этой проблемы, но в конце концов я нашел ее, это не проблема поврежденного файла .class.это поврежденные файлы .class, хранящиеся на вашем локальном сервере (Tomcat7 и т. д.).поэтому

  1. удалите ваш сервер.
  2. очистите ваш проект (в строке меню: Prject -> clean)
  3. добавьте его снова в ваше затмение.
  4. Проект очистите и установите с maven.
  5. Запустите ваш проект.

Будьте счастливы, кодируя.

0 голосов
/ 19 июня 2014

Был такой же проблам. Одно и то же исключение будет брошено на все веб-приложения, и они не могут быть повреждены. Также пытался удалить и повторно развернуть войны, проверить диск на наличие поврежденных секторов и т. Д. Наконец исправлено путем удаления и повторной установки tomcat7.

apt-get purge tomcat7
apt-get install tomcat7

Первопричина остается загадкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...