2013-06-26 68 views
1

(我使用的是1.7泽西)ResourceFilterFactory和非路径注释资源

我试图在我的项目中添加ResourceFilterFactory选择哪些过滤器每使用方法的注释中。

ResourceFilterFactory似乎能够过滤使用Path注释进行注释的资源,但它似乎并未尝试为调用的资源的SubResourceLocator方法生成过滤器。

@Path("a")  
public class A { 

//sub resource locator? 
@Path("b") 
public B getB() { 
    return new B(); 
} 

@GET 
public void doGet() {} 
} 

public class B { 
@GET 
public void doOtherGet() { } 

@Path("c") 
public void doInner() { } 
} 

当跑,过滤器工厂将只要求如下: AbstractResourceMethod(A#的doGet) AbstractSubResourceLocator(A#getB)

当我预料到被调用的每个方法子资源。

我目前在我的web.xml中使用了以下选项;

<init-param> 
    <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name> 
    <param-value>com.my.MyResourceFilterFactory</param-value> 
</init-param> 

<init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>com.my.resources</param-value> 
</init-param> 

我对过滤器厂的理解是否有缺陷?

回答

-1

您需要在类级别为Class B使用@Path注释。当Jersey执行资源扫描时,我敢打赌,它并不会将此类作为资源来获取。

+0

它确实,我一直在运行这个类的设置很多,我只使用ResourceFilterFactory碰到了一个问题。这个例子和我的代码唯一的区别在于子类是用@Produces注释的。 – tousdan

+0

事实证明,你之前的工作对我来说很陌生。在实现ResourceFilterFactory之前,您使用什么URL来击中B类中定义的子资源“doOtherGet()”? – Rosa

+0

那将是/ a/b上的GET。就像我之前所说的,我一直在多台开发机器上运行这个设置,并在大约一年的时间内生产。 – tousdan