【问题标题】:Spring + SOAPExceptionImpl: Error during saving a multipart messageSpring + SOAPExceptionImpl:保存多部分消息时出错
【发布时间】:2009-10-28 18:00:57
【问题描述】:

我有一个带有 jsp 页面的 spring web 应用程序,它调用不同的 web 服务并在 jsp 页面中显示结果。 spring web 应用程序附加了用户名/登录 spring 安全性。

我正在添加对处理安全性的 Web 服务的调用。对于 WebServiceGateway,我添加了一个安全拦截器。 (见下文)

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

当我将 wss4j 添加到我的 pom 文件中时,我现在在 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

【问题讨论】:

    标签: spring spring-ws wss4j


    【解决方案1】:

    可能有点太晚了,但您似乎正在遭受here 所描述的痛苦。 Java 6 中的 Xerces 实现显然与 Spring Web 服务不兼容。 他们的解决方案是开始搞乱认可的库,但这是我想避免的。我还没有找到不涉及修改JVM安装的好解决方案。

    Arjen Poutsma 似乎有另一种解决方案。他删除了所有 Xerces 和 Xalan 依赖项。然后它工作。除非您在 Web 服务应用程序的其他部分需要 Xerces/Xalan 的功能,否则您可以试试这个。相关票证为SWS-175

    【讨论】:

    • 我遇到了同样的问题。我尝试将 Xerces 和 Xalan 罐子放在 Tomcat 认可的文件夹中。但它只是一直问我错过了另一个罐子。忘了它。我所做的是删除 Xerces 和 Xalan(与 Arjen 所做的相同)。它奏效了!
    • @Christ 所以你把它排除在外了吗?
    【解决方案2】:

    我遇到了完全相同的问题,在 tomcat 上测试时,soap web 服务的 spring 客户端工作得非常好,在 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

    根据上面给出的答案,我将 jboss-deployment-structure 文件更改如下,并在排除项中添加了激活、xerces 和 xalan:

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

    这解决了 jboss 上的问题。

    【讨论】:

      【解决方案3】:

      我今天遇到了同样的问题。尝试了所有可能的方法,最后删除了 Xalan.jar 和 xerces.jar。事实上,不仅是 Xalan 和 Xerces JARS,还有 XercesImpl.jar 和所有版本的 Xalan JARS。

      现在一切正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多