Spring + SOAPExceptionImpl: erreur lors de l'enregistrement d'un message en plusieurs parties

StackOverflow https://stackoverflow.com/questions/1638986

  •  08-07-2019
  •  | 
  •  

Question

J'ai une application Web Spring avec des pages JSP qui appelle différents services Web et affiche les résultats dans une page JSP. L’application Web Spring est associée à un nom de sécurité Ressource Spring.

J'ajoute un appel à un service Web qui gère la sécurité. Pour WebServiceGateway, j'ai ajouté un intercepteur de sécurité. (Voir ci-dessous)

<bean id="securityInterceptor"
    class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
    <property name="securementActions" value="UsernameToken Timestamp" />
    <property name="securementUsername" value="Bert" />
    <property name="securementPassword" value="Ernie" />
    <property name="timestampPrecisionInMilliseconds" value="true" />
</bean>

Lorsque j'ai ajouté le fichier wss4j à mon fichier pom, le message d'erreur suivant concernant le service Web s'affiche:

[28-13:46:26]DEBUG: org.springframework.web.servlet.FrameworkServlet.processRequest(): Could not complete request [http-8080-2]
org.springframework.ws.soap.saaj.SaajSoapMessageException: Could not write message to OutputStream: Error during saving a multipart message; nested exception is com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Error during saving a multipart message
    at org.springframework.ws.soap.saaj.SaajSoapMessage.writeTo(SaajSoapMessage.java:163)
    at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:172)
    at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88)
    at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:57)
    at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:230)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:619)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Error during saving a multipart message
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.saveChanges(MessageImpl.java:1124)
    at org.springframework.ws.soap.saaj.Saaj13Implementation.writeTo(Saaj13Implementation.java:268)
    at org.springframework.ws.soap.saaj.SaajSoapMessage.writeTo(SaajSoapMessage.java:159)
    ... 20 more
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to get header stream in saveChanges: 
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.saveChanges(MessageImpl.java:1101)
    ... 22 more
Caused by: java.io.IOException: org.apache.xml.serializer.ToXMLSAXHandler cannot be cast to org.apache.xml.serializer.SerializationHandler
    at com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl.output(EnvelopeImpl.java:295)
    at com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl.output(EnvelopeImpl.java:306)
    at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getContentAsStream(SOAPPartImpl.java:302)
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.getHeaderBytes(MessageImpl.java:945)
    at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.saveChanges(MessageImpl.java:1096)
    ... 22 more
Était-ce utile?

La solution

C'est peut-être un peu tard, mais vous semblez souffrir de ce qui est décrit ici . L'implémentation Xerces dans Java 6 n'est apparemment pas compatible avec Spring Web Services. Leur solution est de commencer à jouer avec les bibliothèques approuvées, mais c'est quelque chose que j'aimerais éviter. Je n'ai pas encore trouvé de solution qui n'implique pas de modification de l'installation de la machine virtuelle Java.

Arjen Poutsma semble avoir une autre solution. Il a supprimé toutes les dépendances Xerces et Xalan. Alors ça marche. Vous pouvez essayer ceci, à moins que vous n'ayez besoin des fonctionnalités de Xerces / Xalan dans une autre partie de votre application de service Web. Le ticket correspondant est SWS-175 .

Autres conseils

J'ai exactement le même problème: le client Spring du service Web soap fonctionnait parfaitement bien lorsqu'il était testé sur tomcat et donnait l'exception suivante lorsqu'il était testé sur jboss:

org.springframework.ws.soap.saaj.SaajSoapMessageException: impossible d'écrire le message dans OutputStream: erreur lors de l'enregistrement d'un message multipart; L'exception imbriquée est com.sun.xml.messaging.saaj.SOAPExceptionImpl: erreur lors de l'enregistrement d'un message en plusieurs parties

Avec la réponse donnée ci-dessus, j'ai modifié le fichier jboss-deployment-structure comme suit et ajouté l'activation, xerces et xalan en exclusion:

<exclusions>
     <module name="org.apache.commons.logging" />
     <module name="org.apache.log4j" />
     <module name="org.jboss.logging" />
     <module name="org.jboss.logging.jul-to-slf4j-stub" />
     <module name="org.jboss.logmanager" />
     <module name="org.jboss.logmanager.log4j" />
     <module name="org.slf4j" />
     <module name="org.slf4j.impl" />
     <module name="javaee.api"/> 
     <module name="javax.ws.rs.api"/>
     <module name="org.apache.xalan"/>
     <module name="org.apache.xerces"/>
     <module name="javax.activation.api"/>
</exclusions>

Ceci a résolu le problème sur jboss.

J'ai rencontré le même problème aujourd'hui. J'ai essayé tous les moyens possibles et finalement retiré Xalan.jar et xerces.jar. En fait, non seulement Xalan et Xerces JARS, mais XercesImpl.jar et toutes les versions de Xalan JARS également.

Maintenant, cela fonctionne parfaitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top