从SOAP客户端调用基于SOAP的Web服务时,我收到以下错误。此WebService部署在带有IBM JDK 7.0的Websphere 8.5.0中。但是,当我使用IBM JDK 6.0在WAS中部署相同的内容时,我能够成功调用并从同一WebService获取响应。非常感谢有关如何解决此问题的任何输入。
java.lang.VerifyError:JVMVRFY012堆栈形状不一致; 类= COM /阳光/ XML /消息/ SAAJ / SOAP / SOAPDocumentImpl, method = createDocumentFragment()Lorg / w3c / dom / DocumentFragment;,pc = 5 at java.lang.J9VMInternals.verifyImpl(Native Method)at java.lang.J9VMInternals.verify(J9VMInternals.java:94)at java.lang.J9VMInternals.initialize(J9VMInternals.java:169)at at com.sun.xml.messaging.saaj.soap.SOAPPartImpl。(SOAPPartImpl.java:106) 在 com.sun.xml.messaging.saaj.soap.ver1_2.SOAPPart1_2Impl。(SOAPPart1_2Impl.java:69) 在 com.sun.xml.messaging.saaj.soap.ver1_2.Message1_2Impl.getSOAPPart(Message1_2Impl.java:89) 在 com.sun.xml.messaging.saaj.soap.MessageImpl.initCharsetProperty(MessageImpl.java:1491) 在 com.sun.xml.messaging.saaj.soap.MessageImpl.init(MessageImpl.java:552) ......还有47个
答案 0 :(得分:1)
问题是WAS提供的库与WebApp库之间的冲突。最后,我能够通过进行不断变化来解决这个问题。现在,我可以使用IBM Java 6或7在WAS 8.5.0,8.5.5上部署相同的应用程序。
将WebModule级别类加载器属性设置为Class loaded with local class loader first (parent last)
。
这可以通过使用WebSphere管理控制台
应用程序 - >所有应用程序 - >选择应用程序名称 - >管理模块 - >选择模块 - >类加载器顺序
从我的项目pom
中删除了以下依赖项wsdl4j,axis-saaj,axis-jaxrpc,org.apache.axis,xml-apis,commons-discovery,jaxb-core
将以下依赖项添加到我的项目pom
xalan,xercesImpl,jaxb-apis,jaxb-impl
答案 1 :(得分:0)
“堆栈形状不一致”通常意味着在编译调用者和编译调用者之间更改了用作参数的类。简单的解决方法是重新编译双方,以便它们使用相同的类定义。
(大多数情况下,我只是重新编译我的整个项目,而不是试图弄清楚什么是不同步的。)