복붙노트

[SPRING] Spring + SOAPExceptionImpl : 여러 부분 메시지 저장 중 오류가 발생했습니다.

SPRING

Spring + SOAPExceptionImpl : 여러 부분 메시지 저장 중 오류가 발생했습니다.

다른 웹 서비스를 호출하고 jsp 페이지에 결과를 표시하는 jsp 페이지가있는 스프링 웹 응용 프로그램이 있습니다. 스프링 웹 애플리케이션에는 사용자 이름 / 로그인 스프링 보안이 첨부되어 있습니다.

보안을 처리하는 웹 서비스에 대한 호출을 추가하고 있습니다. 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>

내 pom 파일에 wss4j를 추가하면 이제 웹 서비스 측에서 다음 오류가 발생합니다.

[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

해결법

  1. ==============================

    1.너무 늦을 지 모르지만 여기에 설명 된 것에서 고통 받고있는 것 같습니다. Java 6의 Xerces 구현은 분명히 Spring Web Services와 호환되지 않습니다. 그들의 해결책은 승인 된 라이브러리를 사용하는 것입니다.하지만 이것은 피하고 싶습니다. 아직 JVM 설치를 수정하지 않는 좋은 해결책을 찾지 못했습니다.

    너무 늦을 지 모르지만 여기에 설명 된 것에서 고통 받고있는 것 같습니다. Java 6의 Xerces 구현은 분명히 Spring Web Services와 호환되지 않습니다. 그들의 해결책은 승인 된 라이브러리를 사용하는 것입니다.하지만 이것은 피하고 싶습니다. 아직 JVM 설치를 수정하지 않는 좋은 해결책을 찾지 못했습니다.

    Arjen Poutsma는 다른 해결책이있는 것 같습니다. 그는 모든 Xerces 및 Xalan 종속성을 제거했습니다. 그런 다음 작동합니다. 웹 서비스 응용 프로그램의 일부 다른 부분에서 Xerces / Xalan의 기능이 필요하지 않다면이 기능을 사용해보십시오. 해당 티켓은 SWS-175입니다.

  2. ==============================

    2.나는 soap 웹 서비스의 스프링 클라이언트가 바람둥이에서 테스트되었을 때 절대적으로 잘 작동하고 똑같은 문제를 겪었고 jboss에서 테스트했을 때 다음과 같은 예외를 주었다.

    나는 soap 웹 서비스의 스프링 클라이언트가 바람둥이에서 테스트되었을 때 절대적으로 잘 작동하고 똑같은 문제를 겪었고 jboss에서 테스트했을 때 다음과 같은 예외를 주었다.

    org.springframework.ws.soap.saaj.SaajSoapMessageException : 메시지를 OutputStream에 쓸 수 없습니다 : 여러 부분 메시지를 저장하는 중 오류가 발생했습니다. 중첩 예외는 com.sun.xml.messaging.saaj.SOAPExceptionImpl : 다중 부분 메시지 저장 중 오류가 발생했습니다.

    위에 주어진 대답으로 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. ==============================

    3.나는 오늘도 같은 문제에 직면했다. 모든 가능한 방법을 시도하고 마지막으로 Xalan.jar 및 xerces.jar를 제거했습니다. 사실 Xalan과 Xerces JARS뿐 아니라 XercesImpl.jar와 Xalan JARS의 모든 버전이 있습니다.

    나는 오늘도 같은 문제에 직면했다. 모든 가능한 방법을 시도하고 마지막으로 Xalan.jar 및 xerces.jar를 제거했습니다. 사실 Xalan과 Xerces JARS뿐 아니라 XercesImpl.jar와 Xalan JARS의 모든 버전이 있습니다.

    이제 완전히 잘 작동합니다.

  4. from https://stackoverflow.com/questions/1638986/spring-soapexceptionimpl-error-during-saving-a-multipart-message by cc-by-sa and MIT license