我正在从事升级项目,将 java web 应用程序从 websphere 应用程序服务器 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;
Type Mismatch, argument 0 in signature com/sun/xml/messaging/saaj/soap/SOAPDocumentFragment.:(Lcom/sun/org/apache/xerces/internal/dom/CoreDocumentImpl;)V does not match Exception Details: Location: com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl.createDocumentFragment()Lorg/w3c/dom/DocumentFragment; @5: JBinvokespecial Reason: Type 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' (current frame, stack[2]) is not assignable to 'com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl' Current Frame: bci: @5 flags: { } locals: { 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' } stack: { 'uninitialized', 'uninitialized', 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' },
作为解决方法,我们尝试将 jar 版本更新为 Saaj_impl-1.3.27,但仍然出现错误。
最佳答案
作为即兴猜测,该问题似乎是 SAAJ RI 和 Axis2 之间的 DOM 混淆。您的应用程序是否捆绑了自己的 Web 服务实现(包括 SAAJ)?您提到将 SAAJ 更新到 1.3.27,并且错误提到了 SAAJ RI,因此如果您的应用程序有自己的 Web 服务实现,那么您需要禁用 WebSphere 提供的 Web 服务实现:
您可以尝试设置以下系统属性:
-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 吗?
关于java - JVMVRFY012 堆栈形状不一致;类=com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520800/