2015-09-28 144 views
4

在WAS 8.5.5中部署Maven项目时出现以下错误。java.lang.VerifyError:JVMVRFY012堆栈形状不一致;

我已经在WAS中安装了JDK 1.6和1.7。

Error 500: org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.VerifyError: JVMVRFY012 stack shape inconsistent; class=com/xyz/simtools/savings/jaxb/SavingsInput_JAXB_Deserialization_Stub, method=write(ILjava/lang/Object;)V, pc=356

事情,我注意到:

  1. 在Tomcat中,它的正常工作
  2. 有一些修正,根据this这在IBM JDK,但它仍然不是为我工作

我试过的东西:

  1. 在WAS中试用了两个JDK版本。
  2. 在IBM论坛阅读本link
  3. 编译我的项目在1.5和1.7,并试图部署

我缺少的东西?我需要照顾的其他任何变化?

回答

1

那么最终我理解了它..

分析:出现这个问题的原因是“JAXB”依赖版本。在 中,我的一些依赖项目“jaxb”依赖项未包含在ivy.xml中...这允许编译器将JDK中存在的jaxb作为依赖项。然而,在其他依赖项目中,“jaxb”依赖项已在某些版本的ivy中明确定义...因此,依赖项目是使用不同的jaxb版本编译的,最终将通过“VerifyError”与jaxb进行编译。

解决方案:通过在ivy中添加“jaxb”版本来解决问题,因为依赖项目没有显式地使用jaxb版本,而在主项目中也使用Maven依赖项。

+0

你怎么在常春藤添加JAXB好吗? – rainman

+0

master(*),runtime(*)”/> – pa1

4

我有同样的问题,但在我的情况下,问题和修复是不同的事情。

(可能的)原因:我有关问题的原因裁决是相同的API两个版本实现之间的冲突。在设计时间,在我的工作站(根据我所在地的既定规则),我的IDE使用IBM JDK实现的SAAJ 1.4来编译我的Web服务类。

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 formato de pilha inconsistente;

解决方法:简单地说,取SAAJ-IMPL-1.3.18.jar出Tomee的lib文件夹(移动)的。 由于Tomee/Tomcat的使用相同的IBM JDK作为我的IDE,我发现,这场冲突可能是因为在Tomee的lib文件夹本地化SAAJ-IMPL-1.3.18.jar的。走出去,让Tomee在运行时使用与编译时使用的相同的实现(IBM JDK)。

注意我在开发工作站有这个问题,而不是开发/生产(主机)环境。由于工作站配置文件的规则,这是我找到的解决方法。