无法为Jersey添加服务bean的拦截器

时间:2014-05-28 18:37:08

标签: spring web-services rest spring-aop jersey-2.0

我正在使用Jersey 2.6编写REST Web服务。 我在web.xml中提供服务bean(服务的入口点)

<servlet>
    <servlet-name>Jersey_REST</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.my.abc.webservices</param-value>
    </init-param> 
</servlet>

此软件包(com.my.abc.webservices)包含服务bean(Web服务的入口点):

 package com.my.abc.webservices;
    @Service("caseWebService")
    @Path("/CaseService")
    public class CaseWebService {
    ----
    }

在spring应用程序上下文中,我想以上述方式向上面的bean添加一个方法拦截器:

<bean
        class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames" value="caseWebService" />  
        <property name="interceptorNames">
            <list>
                  <value>traceInterceptor</value>
            </list>
        </property>
    </bean>

此跟踪拦截器只是日志拦截器,它记录传递给服务方法的参数。

问题:拦截器没有被调用。

但是如果我通过根据需要更改<property name="beanNames" value="myHandler" />将这些拦截器添加到其他bean中,拦截器就会被调用。

怀疑:是因为&#34; caseWebService&#34;初始化与Jersey有关(我认为Spring仍然会主动初始化这个bean&#34; caseWebService&#34;因为我们在它上面给了@Service,而Jersery只会查找provider包来查找入口bean,如果是这种情况,那么为什么spring无法代理&#34; caseWebService&#34;因此无法添加拦截器)而#34; myHandler&#34; bean由Spring本身初始化。

0 个答案:

没有答案