Spring + SOAPExceptionImpl: errore durante il salvataggio di un messaggio multipart

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

  •  08-07-2019
  •  | 
  •  

Domanda

Ho un'applicazione web di primavera con pagine jsp che chiama diversi servizi web e visualizza i risultati in una pagina jsp. L'applicazione web di primavera ha un nome utente / login di sicurezza di primavera collegato ad essa.

Sto aggiungendo una chiamata a un servizio Web che gestisce la sicurezza. Per WebServiceGateway, ho aggiunto un intercettore di sicurezza. (Vedi sotto)

<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>

Quando ho aggiunto wss4j nel mio file pom, ora visualizzo il seguente errore sul lato del servizio Web:

[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
È stato utile?

Soluzione

Potrebbe essere un po 'troppo tardi, ma sembra che tu soffra di ciò che è descritto qui . L'implementazione di Xerces in Java 6 non è apparentemente compatibile con i servizi Web di primavera. La loro soluzione è iniziare a fare confusione con le librerie approvate, ma questo è qualcosa che vorrei evitare. Non ho ancora trovato una buona soluzione che non implichi la modifica dell'installazione di JVM.

Arjen Poutsma sembra avere un'altra soluzione. Ha rimosso tutte le dipendenze di Xerces e Xalan. Quindi funziona. A meno che tu non abbia bisogno delle funzionalità di Xerces / Xalan in qualche altra parte dell'applicazione del tuo servizio web, puoi provare questo. Il biglietto rilevante è SWS-175 .

Altri suggerimenti

Ho avuto esattamente lo stesso problema in cui il client di primavera del servizio web soap stava funzionando perfettamente quando testato su Tomcat e stava dando la seguente eccezione quando testato su jboss:

org.springframework.ws.soap.saaj.SaajSoapMessageException: impossibile scrivere il messaggio su OutputStream: errore durante il salvataggio di un messaggio multipart; l'eccezione nidificata è com.sun.xml.messaging.saaj.SOAPExceptionImpl: errore durante il salvataggio di un messaggio multipart

Con la risposta di cui sopra, ho modificato il file jboss-deployment-structure come segue e ho aggiunto l'attivazione, xerces e xalan in esclusione:

<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>

Questo ha risolto il problema su jboss.

Oggi ho affrontato lo stesso problema. Ho provato tutti i modi possibili e finalmente rimosso Xalan.jar e xerces.jar. In realtà non solo Xalan e Xerces JARS, ma anche XercesImpl.jar e tutte le versioni di Xalan JARS.

Ora funziona perfettamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top