Printemps + SOAPExceptionImpl: Erreur lors de l'enregistrement d'un message multipart
J'ai un printemps application web avec des pages jsp que les appels des différents services web et affiche les résultats dans une page jsp. Le printemps de l'application web a nom d'utilisateur/login printemps de sécurité attaché à elle.
Je suis ajout d'un appel à un web service qui s'occupe de la sécurité. Pour le WebServiceGateway, j'ai ajouté une sécurité de l'intercepteur. (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>
Quand j'ai ajouté le wss4j dans mon fichier pom, maintenant, je reçois le message d'erreur suivant sur le service web côté:
[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
Vous devez vous connecter pour publier un commentaire.
Il peut être un peu trop tard, mais vous semblent souffrir de ce qui est décrit ici. La Xerces mise en œuvre en Java 6 est apparemment pas compatible avec le Printemps des Services Web.
Leur solution est de commencer à jouer avec approuvé libs, mais c'est quelque chose que je voudrais éviter. Je n'ai pas encore trouvé une bonne solution qui n'implique pas de modification de l'installation JVM.
Arjen Poutsma semble avoir une autre solution. Il a enlevé tous les Xerces et Xalan dépendances. Puis il travaille. Sauf si vous avez besoin des fonctionnalités de Xerces/Xalan dans une autre partie de vous application de service web, vous pouvez essayer ce. Le billet pertinent est SWS-175.
J'ai eu exactement le même problème dans lequel printemps client de service web soap fonctionnait très bien lors d'un essai sur tomcat et a donner des exceptions ci-après lorsqu'il est testé sur de jboss:
org.springframework.ws.soap.saaj.SaajSoapMessageException: Could not write message to OutputStream: Error during saving a multipart message; nested exception is com.sun.xml.messaging.saaj.SOAPExceptionImpl: Error during saving a multipart message
Avec la réponse donnée ci-dessus, j'ai changé de jboss-déploiement de la structure de fichier comme suit, et ajouté de l'activation, xerces et xalan à l'exclusion:
Cette résolu le problème sur jboss.
J'ai connu le même problème aujourd'hui. J'ai essayé toutes les façons possibles et finalement retiré Xalan.jar et xerces.jar. En fait, non seulement Xalan et Xerces POTS mais XercesImpl.jar et toutes les versions de Xalan des BOCAUX.
Maintenant ça fonctionne tout à fait acceptable.