我正在使用Spring-ws 2.1.4.RELEASE和Spring 3.2.8.RELEASE,我正在尝试向我的端点添加一个拦截器,但到目前为止还没有成功,尽管我认为我的设置非常简单。
在我的Spring-ws XML中,我有:
<sws:interceptors>
<bean class="org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor"/>
</sws:interceptors>
<sws:annotation-driven/>
<context:component-scan base-package="package.with.my.endpoints" />
<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">
<property name="payloadCaching" value="true"/>
</bean>
在我的Endpoint注解bean中,我使用了Spring-ws @Action注解来进行ws寻址映射:
@Endpoint("MedicineCardIdwsEndpoint")
public class MedicineCardIdws {
@Action("http://someuriandversion#GetMedicineCardIdws")
@ResponsePayload
public String getMedicineCard(@RequestPayload Element payload, SoapMessage soapMessage) {
return "";
}
但是,当我发送对端点的请求时,拦截器不会记录任何内容。起初,我认为我错误地配置了log4j。但是,如果我在org.springframework.ws.server.endpoint.AbstractLoggingInterceptor#handleRequest的第一行创建了一个断点,则该断点永远不会被触发。
然后,我在org.springframework.ws.soap.server.SoapMessageDispatcher#headerUnderstood中放置了一个断点,可以看到为我的终结点注册的唯一拦截器是org.springframework.ws.soap.addressing.server.AddressingEndpointInterceptor,它是由于操作注释而添加的。
我以为XML配置中的任何全局拦截器最终都会被添加到所有端点的拦截器链中?然而,情况似乎并非如此。它不仅仅是日志拦截器,甚至没有添加自定义拦截器。所以我一定是做错了什么。
我是使用Spring-ws的新手--我是不是在配置中遗漏了什么,或者我需要添加一个注释,以便为注释扫描的端点添加拦截器?
在使用Spring-ws的组件扫描和注释时,有没有其他方法可以将拦截器添加到拦截器链中?或者,为了确保拦截器被添加到端点,我是否需要在XML中配置所有的拦截器?
发布于 2014-04-23 14:15:27
我发现,如果我使用@SoapAction注释而不是WS-Addressing @Action (来自Spring-ws包的bot),我的来自XML配置的自定义拦截器将被添加到端点。
我还在Spring论坛上找到了这个帖子,建议在@SoapAction不是一个选项的情况下解决这个问题:http://forum.spring.io/forum/spring-projects/web-services/100060-interceptors-not-working-for-ws-addressing-endpoint-action
https://stackoverflow.com/questions/23218121
复制相似问题