2011-01-11 10 views
1

ファイルが添付されてストリーミングを使用する要求を受け取るためにSpring WSを取得する際に問題があります。セキュリティー・インターセプターを使用したSpring WSストリーミング・アタッチメントの問題

 
2011-01-11 15:10:05,132 DEBUG [org.springframework.ws.soap.server.SoapMessageDispatcher] - 
java.lang.IllegalArgumentException: Error in converting SOAP Envelope to Document 
    at org.springframework.ws.soap.axiom.support.AxiomUtils.toDocument(AxiomUtils.java:135) 
    at org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor.toDocument(Wss4jSecurityInterceptor.java:621) 
    at org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor.validateMessage(Wss4jSecurityInterceptor.java:492) 
    at org.springframework.ws.soap.security.AbstractWsSecurityInterceptor.handleRequest(AbstractWsSecurityInterceptor.java:104) 
    at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:213) 
    at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:168) 
    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:727) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:530) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:426) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:457) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:931) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:361) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:867) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113) 
    at org.eclipse.jetty.server.Server.handle(Server.java:337) 
    at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:581) 
    at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1020) 
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:775) 
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:228) 
    at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:417) 
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:474) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:437) 
    at java.lang.Thread.run(Thread.java:595) 
Caused by: org.apache.axiom.om.OMException: java.util.NoSuchElementException 
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249) 
    at org.apache.axiom.om.impl.llom.OMNodeImpl.build(OMNodeImpl.java:327) 
    at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:706) 
    at org.springframework.ws.soap.axiom.support.AxiomUtils.toDocument(AxiomUtils.java:125) 
    ... 34 more 
Caused by: java.util.NoSuchElementException 
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1083) 
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:506) 
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161) 
    ... 37 more 

私は公理メッセージ・ファクトリを使用しています:

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

リガード、 クレイグ

答えて

0

私が試行錯誤を通じて、この問題に対する解決策が見つかりました:

を問題はwss4jSecurityInterceptorの設定で、行:

<property name="secureResponse" value="false"/> 
<property name="secureRequest" value="false" /> 

がされている必要があります。

<property name="validateRequest" value="false" /> 
<property name="validateResponse" value="false" /> 
+0

ハイパークレイグ、私がを追加すると、インターセプタはまったく検証されません。処理されます。それは同じか、何かが足りない – Chakri

1

は、私はあなたが定義したセキュリティインターセプタはまだペイロードを消費することを信じています。それはセキュリティ検証を実行しません。セキュリティインターセプタに提供されるMessageContextを作成するには、AxiomSoapMessageFactory.createWebServiceMesssage()メソッドを呼び出す必要があります。セキュリティインターセプタは、secureRequestフラグに従って、それを無視します。

+0

何createWebServiceMessage()メソッドが確実に呼び出されるようにセキュリティインターセプタの設定を変更しますか? –

+0

私が推測することは、このメソッドが呼び出されていて、インターセプタに設定したフラグに関係なくペイロードを消費するということでした。それが正しいと仮定すると、payloadCachingをtrueに設定し、メモリのフットプリントを減らすために添付ファイルのキャッシュに頼る必要があるかもしれないと思います。 – Dave

+0

私はこれを試して、payloadCachingはセキュリティインターセプタを実行できるようにしていますが、添付ファイルがキャッシュされていても、エンドポイントにOutOfMemoryErrorがあります。 –

関連する問題