Spring WSがファイルが添付されたリクエストを受信し、ストリーミングを使用するのに問題があります。問題は、セキュリティインターセプターを使用しようとすると、次の例外が発生することです。
2011-01-11 15:10:05,132デバッグ[org.springframework.ws.soap.server.SoapMessageDispatcher]- java.lang.IllegalArgumentException:SOAPエンベロープをドキュメントに変換中にエラーが発生しました org.springframework.ws.soap.axiom.support.AxiomUtils.toDocument(AxiomUtils.java:135)で org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor.toDocument(Wss4jSecurityInterceptor.java:621)で org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor.validateMessage(Wss4jSecurityInterceptor.java:492)で org.springframework.ws.soap.security.AbstractWsSecurityInterceptor.handleRequest(AbstractWsSecurityInterceptor.java:104)で org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:213)で org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:168)で org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88)で org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:57)で org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:230)で org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)で org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)で javax.servlet.http.HttpServlet.service(HttpServlet.java:727)で javax.servlet.http.HttpServlet.service(HttpServlet.java:820)で org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530)で org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:426)で org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)で org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:457)で org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)で org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931)で org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:361)で org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)で org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867)で org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)で org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245)で org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)で org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)で org.eclipse.jetty.server.Server.handle(Server.java:337)で org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:581)で org.eclipse.jetty.server.HttpConnection $ RequestHandler.content(HttpConnection.java:1020)で org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:775)で org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:228)で org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:417)で org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:474)で org.eclipse.jetty.util.thread.QueuedThreadPool $ 2.run(QueuedThreadPool.java:437)で java.lang.Thread.run(Thread.java:595)で 原因:org.apache.axiom.om.OMException:java.util.NoSuchElementException org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)で org.apache.axiom.om.impl.llom.OMNodeImpl.build(OMNodeImpl.java:327)で org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:706)で org.springframework.ws.soap.axiom.support.AxiomUtils.toDocument(AxiomUtils.java:125)で ...34もっと 原因:java.util.NoSuchElementException com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1083)で org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:506)で org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161)で ...37もっと
私はAxiomMessageFactoryを使用しています。
<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">
<property name="payloadCaching" value="false"/>
<property name="attachmentCaching" value="true"/>
<property name="attachmentCacheThreshold" value="1024" />
</bean>
私のエンドポイントマッピングはwss4jSecurityInterceptorを使用しています。
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
<property name="mappings">
<props>
<prop key="{http://www.aquilauk.co.uk/hribulkupload}BulkHRRequest">hriBulkUploadEndpoint</prop>
</props>
</property>
<property name="interceptors">
<list>
<!-- <bean class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor"/> -->
<ref bean="wss4jSecurityInterceptor"/>
</list>
</property>
</bean>
私のセキュリティインターセプターは、ペイロードを使用しないように設定されています。
<bean id="wss4jSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
<property name="validationActions" value="UsernameToken" />
<property name="validationCallbackHandler" ref="springWSS4JHandler"/>
<property name="secureResponse" value="false"/>
<property name="secureRequest" value="false" />
</bean>
<bean id="acegiWSS4JHandler"
class="org.springframework.ws.soap.security.wss4j.callback.SpringPlainTextPasswordValidationCallbackHandler">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
よろしく、クレイグ