java.lang.VerifyError: форма стека JVMVRFY012 несовместима;

Я получаю следующую ошибку при развертывании проекта Maven в WAS 8.5.5.

Я установил JDK 1.6 и 1.7 в WAS.

Ошибка 500: org.springframework.web.util.NestedServletException: ошибка обработки обработчика; вложенным исключением является java.lang.VerifyError: форма стека JVMVRFY012 несовместима; class=com/xyz/simtools/savings/jaxb/SavingsInput_JAXB_Deserialization_Stub, method=write(ILjava/lang/Object;)V, pc=356

Вещи, которые я заметил:

  1. В Tomcat работает нормально
  2. В IBM JDK было исправлено это в соответствии с это, но у меня все еще не работает

Что я пробовал:

  1. Пробовал с обеими версиями JDK в WAS.
  2. Прочтите эту ссылку на форуме IBM
  3. Скомпилировал мой проект в 1.5 и 1.7 и попытался развернуть

Я что-то пропустил? Любые другие изменения, о которых мне нужно позаботиться?


person Pavan Rao    schedule 28.09.2015    source источник


Ответы (2)


У меня была такая же проблема, но в моем случае проблема и решение были разными.

(Возможная) причина: Мой вердикт относительно причины проблемы заключался в конфликте между двумя версиями реализации одного и того же API. Во время проектирования на моей рабочей станции (в соответствии с установленными правилами того места, где я нахожусь) моя IDE использовала реализацию SAAJ 1.4 IBM JDK для компиляции моих классов веб-сервисов.

IBM\jdk\jre\lib\rt.jar/com\sun\xml\internal\messaging\saaj\soap\SOAPDocumentImpl.class

Во время среды выполнения при использовании Tomee(Tomcat) 1.7.3 один и тот же класс загружался по всему пути:

$TOMEE_HOME\lib\saaj-impl-1.3.18.jar/com\sun\xml\internal\messaging\saaj\soap\SOAPDocumentImpl.class

И это вызывало ошибку проверки во время выполнения веб-служб:

  • java.lang.VerifyError: форма стека JVMVRFY012 несовместима;
  • (на португальском языке): java.lang.VerifyError: несовместимый формат JVMVRFY012;

Временное решение. Просто возьмите файл saaj-impl-1.3.18.jar из папки lib Tomee (переместите его). Поскольку Tomee/Tomcat использовал тот же IBM JDK, что и моя IDE, я обнаружил, что конфликт может быть из-за saaj-impl-1.3.18.jar, локализованного в папке lib Tomee. Далее заставьте Tomee использовать ту же реализацию во время выполнения, которая использовалась во время компиляции (IBM JDK).

Обратите внимание, что у меня была эта проблема на моей рабочей станции разработки, а не в среде разработки/производства (хост). Из-за правил профиля рабочей станции это обходной путь, который, как я обнаружил, работает для меня.

person Community    schedule 05.01.2016

Ну наконец-то я понял..

Анализ. Проблема возникла из-за версии зависимости «jaxb». В некоторых моих проектах зависимостей зависимость "jaxb" не была включена в ivy.xml... Это позволило компилятору использовать jaxb, присутствующий в JDK, в качестве зависимости. Однако в других проектах зависимостей зависимость «jaxb» была явно определена в ivy с некоторой версией ... Из-за этого проекты зависимостей были скомпилированы с другой версией jaxb, которая в конечном итоге через «VerifyError» по отношению к jaxb.

Решение. Проблема устранена путем добавления версии «jaxb» в ivy для проектов зависимостей, которые явно не имеют версии jaxb, а также в основном проекте в качестве зависимости Maven.

person Pavan Rao    schedule 29.09.2015
comment
Как вы добавили jaxb в ivy, пожалуйста? - person rainman; 08.01.2018
comment
‹dependency org=javax.xml.bind name=jaxb-api rev=2.2.5 conf=compile-›master(),runtime()/› - person Pavan Rao; 11.01.2018