5 votes

Exception générée par la classe d'application 'com.sun.xml.messaging.saaj.soap.SOAPPartImpl.:119'.

J'essaie de déployer une application Java sur Bluemix. Lorsque je la déploie sur mon ordinateur local Liberty Server(Liberty 16.0.0.2) cela fonctionne bien et je suis en mesure d'atteindre l'URL à partir d'une page Web. SOAP client.

Mais quand je l'essaie sur Bluemix, il me donne cette erreur :

Exception déclenchée par la classe d'application com.sun.xml.messaging.saaj.soap.SOAPPartImpl.:119' (en anglais) java.lang.VerifyError : JVMVRFY012 forme de pile incohérente ; class=com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl, method=createDocumentFragment()Lorg/w3c/dom/DocumentFragment ;, pc=5 ; Erreur de type, argument 0 dans la signature com/sun/xml/messaging/saaj/soap/SOAPDocumentFragment. :(Lcom/sun/org/apache/xerces/internal/dom/CoreDocumentImpl ;)V ne correspond pas Détails de l'exception : Emplacement : com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl.createDocumentFragment()Lorg/w3c/dom/DocumentFragment ; @5 : JBinvokespecial Raison : Type com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' (cadre actuel, stack[2]) n'est pas assignable à com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl' Cadre actuel Cadre : bci : @5 flags : { } locals : { 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' } stack : { 'uninitialized', 'uninitialized', 'com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl' } at com.sun.xml.messaging.saaj.soap.SOAPPartImpl.(SOAPPartImpl.java:119) à l'adresse com.sun.xml.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.(SOAPPart1_1Impl.java:89) à l'adresse com.sun.xml.messaging.saaj.soap.ver1_1.Message1_1Impl.getSOAPPart(Message1_1Impl.java:109) à l'adresse org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.handleMessage(SAAJInInterceptor.java:101) à l'adresse org.apache.cxf.jaxws.handler.soap.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:78) à l'adresse org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.getOpQName(SOAPHandlerInterceptor.java:294) à l'adresse org.apache.cxf.jaxws.handler.AbstractJAXWSHandlerInterceptor.setupBindingOperationInfo(AbstractJAXWSHandlerInterceptor.java:111) à l'adresse org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.createProtocolMessageContext(SOAPHandlerInterceptor.java:235) à l'adresse org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessageInternal(SOAPHandlerInterceptor.java:144) à l'adresse org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:119) à l'adresse org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:69) à l'adresse org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236) à l'adresse org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:89) à l'adresse org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99) à l'adresse org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:368) à l'adresse org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:183) à l'adresse org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:163) à l'adresse org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServlet.java:145) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1290) at [classes internes]

J'ai déjà essayé de déployer le serveur liberty packagé et les options de répertoire de serveur. Mais cela ne fonctionne pas. J'ai également essayé, avec ibm-web-ext.xml approche, où nous changeons fileServingEnabled="false" . Mais cela donne la même erreur.

2voto

Cela est dû à un conflit de bibliothèques entre les services SOAP CFX (qui peuvent être fournis par l'application) et les bibliothèques du JRE.

Pour y remédier, passez les éléments suivants comme arguments VM pour demander à votre JVM d'utiliser les bibliothèques appropriées fournies avec JRE (au lieu de CFX).

javax.xml.soap.MessageFactory = (en anglais) 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

1voto

Justin Stenning Points 571

Pour compléter la réponse de Dinesh, afin d'indiquer à la JVM de Bluemix d'utiliser vos bibliothèques groupées (au lieu de CFX), ajoutez ce qui suit à la section jvm.options dans le Root du serveur (à créer si nécessaire) :

-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

0voto

Pour compléter ce qu'a dit Justin, voici la commande à exécuter si vous utilisez Liberty Server et que vous vous y connectez via l'interface 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 : pour plus d'informations sur la commande cf, allez à ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X