首页 > 解决方案 > 获取 JVMVRFY012 堆栈形状不一致;类=com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl

问题描述

我正在进行升级项目,其中将 java web 应用程序从 websphere Application server 8.5 中的 java 6 移动到 java 8。

我们正在使用许多 SOAP Web 服务调用与其他内部系统和供应商系统进行交互。所以现在每次系统尝试创建 SOAP 请求时,我们都会收到以下错误消息。

JVMVRFY012 stack shape inconsistent; class=com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl, method=createDocumentFragment()Lorg/w3c/dom/DocumentFragment;, pc=5; 

类型不匹配,签名 com/sun/xml/messaging/saaj/soap/SOAPDocumentFragment.:(Lcom/sun/org/apache/xerces/internal/dom/CoreDocumentImpl;)V 中的参数 0 不匹配异常详细信息:位置:com /sun/xml/messaging/saaj/soap/SOAPDocumentImpl.createDocumentFragment()Lorg/w3c/dom/DocumentFragment;@5:JBinvokespecial 原因:类型 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl'(当前帧,堆栈 [2])不可分配给 'com/sun/org/apache/xerces/internal/dom/ CoreDocumentImpl' 当前帧:bci:@5 标志:{ } locals:{ 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' } 堆栈:{ 'uninitialized', 'uninitialized', 'com/sun/xml/消息传递/saaj/soap/SOAPDocumentImpl' },

作为一种解决方法,我们尝试将 jar 版本更新为 Saaj_impl-1.3.27,但仍然出现错误。

标签: javajvmwebspheresaaj

解决方案


作为一个即兴猜测,这个问题似乎是 SAAJ RI 和 Axis2 之间的 DOM 混淆。您的应用程序是否捆绑了它自己的 Web 服务实现,包括 SAAJ?您提到将 SAAJ 更新到 1.3.27 并且错误提到了 SAAJ RI,因此如果您的应用程序有自己的 Web 服务实现,那么您需要禁用 WebSphere 提供的那个:

https://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/twbs_thirdparty.html

您可以尝试设置以下系统属性:

-Djavax.xml.soap.SOAPFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl 
-Djavax.xml.soap.SOAPConnectionFactory=com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnectionFactory 
-Djavax.xml.soap.MetaFactory=com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl
-Dcom.ibm.websphere.webservices.DisableIBMJAXWSEngine=true 

这些属性是一个示例,SAAJ RI 的完全限定名称可能会根据您使用的 SAAJ 版本而改变。

如果您的应用程序应该使用 WebSphere Web 服务引擎,您能否告诉我您使用的是哪个版本的 Java 8?


推荐阅读