Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有安全拦截器的Spring WS-Streaming附件存在问题_Streaming_Spring Ws_Mtom_Axiom - Fatal编程技术网

带有安全拦截器的Spring WS-Streaming附件存在问题

带有安全拦截器的Spring WS-Streaming附件存在问题,streaming,spring-ws,mtom,axiom,Streaming,Spring Ws,Mtom,Axiom,我在让SpringWS接收带有附加文件的请求并使用流媒体时遇到问题。问题是,每当我尝试使用安全拦截器时,都会出现以下异常: 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.spr

我在让SpringWS接收带有附加文件的请求并使用流媒体时遇到问题。问题是,每当我尝试使用安全拦截器时,都会出现以下异常:

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>
2011-01-11 15:10:05132调试[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.HandlerRequest(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) http.HttpParser.parseNext(HttpParser.java:775) 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) 运行(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.statxombuilder.parserNext(statxombuilder.java:506) 位于org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:161) ... 37多 我使用的是Axiom消息工厂:

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

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>

hriBulkUploadEndpoint
我的安全拦截器已经设置好,以确保它不会利用有效载荷:

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

关于,,
Craig

我相信您定义的安全拦截器仍然使用有效负载。它只是不执行任何安全验证。应调用
AxiomSoapMessageFactory.CreateWebServiceMessage()
方法,以创建提供给安全侦听器的MessageContext。然后,安全拦截器会根据secureRequest标志忽略它。

我相信您定义的安全拦截器仍然会使用有效负载。它只是不执行任何安全验证。应调用
AxiomSoapMessageFactory.CreateWebServiceMessage()
方法,以创建提供给安全侦听器的MessageContext。然后,安全拦截器会根据secureRequest标志忽略它。

我通过反复试验找到了这个问题的解决方案:

问题在于wss4jSecurityInterceptor的设置,行:

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

应该是:

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

我通过反复试验找到了这个问题的解决方案:

问题在于wss4jSecurityInterceptor的设置,行:

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