如何向我的注释扫描spring-ws端点添加自定义拦截器

时间:2014-04-22 11:27:20

标签: spring web-services spring-ws

我正在使用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里放了一个断点我可以看到为我的Endpoint注册的唯一拦截器是org.springframework.ws.soap.addressing.server.AddressingEndpointInterceptor由于Action注释而被添加。

我认为XML配置中的任何全局拦截器最终都会被添加到所有端点的拦截器链中?但似乎事实并非如此。它不仅仅是日志拦截器,甚至不添加自定义拦截器。所以我一定做错了。

我使用Spring-ws相当新 - 我在配置中遗漏了什么,或者是否需要添加注释才能为注释扫描端点添加拦截器?

在使用Spring-ws的组件扫描和注释时,是否有其他方法可以将拦截器添加到拦截器链中?或者我是否需要在XML中配置所有拦截器以确保我的拦截器被添加到我的端点?

1 个答案:

答案 0 :(得分:0)

我发现如果我使用@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