java.lang.VerifyError: JVMVRFY012 堆栈形状不一致;

Pav*_*Rao 5 java websphere java-7 ibm-was

在 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

我注意到的事情:

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

我尝试过的事情:

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

我错过了什么吗?我需要注意的任何其他变化?

Ual*_*Jr. 4

我遇到了同样的问题,但就我而言,问题和解决方法是不同的。

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

IBM\jdk\jre\lib\rt.jar/com\sun\xml\internal\messaging\saaj\soap\SOAPDocumentImpl.class
Run Code Online (Sandbox Code Playgroud)

运行时,使用 Tomee(Tomcat) 1.7.3,在整个路径中加载相同的类:

$TOMEE_HOME\lib\saaj-impl-1.3.18.jar/com\sun\xml\internal\messaging\saaj\soap\SOAPDocumentImpl.class
Run Code Online (Sandbox Code Playgroud)

这导致执行 Web 服务时出现验证错误:

  • java.lang.VerifyError:JVMVRFY012堆栈形状不一致;
  • (葡萄牙语): java.lang.VerifyError:JVMVRFY012 格式不一致;

解决方法:简单地,将 saaj-impl-1.3.18.jar 从 Tomee 的 lib 文件夹中取出(移动它)。由于 Tomee/Tomcat 使用与我的 IDE 相同的 IBM JDK,我发现冲突可能是由于 Tomee 的 lib 文件夹中本地化的 saaj-impl-1.3.18.jar 造成的。离开那里,让 Tomee 在运行时使用与编译时使用的相同的实现 (IBM JDK)。

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