【问题标题】:Exception thrown by application class 'com.sun.xml.messaging.saaj.soap.SOAPPartImpl.:119'应用程序类“com.sun.xml.messaging.saaj.soap.SOAPPartImpl.:119”引发的异常
【发布时间】:2016-11-13 03:19:33
【问题描述】:

我正在尝试通过 Bluemix 部署 Java 应用程序。当我将它部署在我的本地 Liberty Server(Liberty 16.0.0.2) 上时,它工作正常,我可以从 SOAP 客户端访问 URL。

但是当我在 Bluemix 上尝试时,它给了我这个错误:

应用程序类抛出的异常 'com.sun.xml.messaging.saaj.soap.SOAPPartImpl.:119' java.lang.VerifyError: JVMVRFY012 堆栈形状不一致; class=com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl, 方法=createDocumentFragment()Lorg/w3c/dom/DocumentFragment;, pc=5; 类型不匹配,签名中的参数 0 com/sun/xml/messaging/saaj/soap/SOAPDocumentFragment.:(Lcom/sun/org/apache/xerces/internal/dom/CoreDocumentImpl;)V 不匹配异常详细信息:位置: com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl.createDocumentFragment()Lorg/w3c/dom/DocumentFragment; @5:JBinvokespecial 原因:类型 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl'(当前帧, stack[2]) 不可分配给 'com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl' 当前 框架:bci:@5 标志:{ } 本地人:{ 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' } 堆栈:{ '未初始化', '未初始化', 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' } 在 com.sun.xml.messaging.saaj.soap.SOAPPartImpl.(SOAPPartImpl.java:119) 在 com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.(SOAPPart1_1Impl.java:89) 在 com.sun.xml.messaging.saaj.soap.ver1_1.Message1_1Impl.getSOAPPart(Message1_1Impl.java:109) 在 org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.handleMessage(SAAJInInterceptor.java:101) 在 org.apache.cxf.jaxws.handler.soap.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:78) 在 org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.getOpQName(SOAPHandlerInterceptor.java:294) 在 org.apache.cxf.jaxws.handler.AbstractJAXWSHandlerInterceptor.setupBindingOperationInfo(AbstractJAXWSHandlerInterceptor.java:111) 在 org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.createProtocolMessageContext(SOAPHandlerInterceptor.java:235) 在 org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessageInternal(SOAPHandlerInterceptor.java:144) 在 org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:119) 在 org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:69) 在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236) 在 org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:89) 在 org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99) 在 org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:368) 在 org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:183) 在 org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:163) 在 org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServlet.java:145) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1290) 在[内部课程]

我已经尝试部署打包的 liberty 服务器和服务器目录选项。但它不起作用。 我也尝试过使用ibm-web-ext.xml 方法,我们更改fileServingEnabled="false"。但它给出了同样的错误。

【问题讨论】:

    标签: java soap ibm-cloud


    【解决方案1】:

    这是由于 SOAP CFX 服务(可能由应用程序捆绑)与 JRE 中的库之间的库冲突。

    要克服这个问题,请将以下内容作为 VM 参数传递,以指示您的 JVM 使用与 JRE(而不是 CFX)捆绑的适当库。

    javax.xml.soap.MessageFactory = com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl javax.xml.soap.SOAPFactory = com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl javax.xml.soap.SOAPConnectionFactory = com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnectionFactory javax.xml.soap.MetaFactory = com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl

    【讨论】:

    • 在 jvm.options 文件中工作,只要您在每行前面包含 -D。例如-Djavax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
    【解决方案2】:

    只是为了扩展 Dinesh 的回答,为了指示 Bluemix JVM 使用您的捆绑库(而不是 CFX),请将以下内容添加到服务器根目录中的 jvm.options(如有必要,请创建):

    -Djavax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
    -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
    

    【讨论】:

      【解决方案3】:

      只是为了扩展 Justin 所说的内容,如果您使用 Liberty Server 并通过 CLI 推送到它,这是要运行的命令

      cf set-env WebServicesSOAP IBM_JAVA_OPTIONS "-Djavax.xml.soap.MessageFactory=com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl -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"
      

      PS:更多关于cf命令的信息,请转至here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-13
        • 1970-01-01
        • 2016-01-04
        相关资源
        最近更新 更多