2013-06-26 105 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