在WAS 8.5.5中部署Maven项目时出现以下错误。
我在WAS中安装了JDK 1.6和1.7。
错误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
我注意到的事情:
答案 0 :(得分: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
这导致Web服务执行时出现验证错误:
解决方法 :只需将saaj-impl-1.3.18.jar从Tomee的lib文件夹中取出(移动它)。 由于Tomee / Tomcat使用与我的IDE相同的IBM JDK,我发现冲突可能是因为在Tomee的lib文件夹中本地化了saaj-impl-1.3.18.jar。离开那里,让Tomee在运行时使用在编译时使用的相同实现(IBM JDK)。
请注意我在开发工作站遇到此问题,而不是开发/生产(主机)环境。由于工作站配置文件的规则,这是我发现对我有用的解决方法。
答案 1 :(得分:1)
好吧终于我明白了..
分析:问题是由于“jaxb”依赖版本而发生的。在 我的一些依赖项目“jaxb”依赖项未包含在ivy.xml中...这使得编译器可以将JDK中存在的jaxb作为依赖项。但是在其他依赖项目中,“jaxb”依赖项在常春藤中使用某个版本明确定义...因此,依赖项目使用不同的jaxb版本进行编译,最终将通过“VerifyError”转换为jaxb。
解决方案:通过在ivy中为依赖项目添加“jaxb”版本来解决问题,这些项目没有明确地具有jaxb版本以及在主项目中作为Maven依赖项。