2017-10-06 69 views
0

我試圖用舊的RESTEasy 3.0.5更新WAR到更新的東西。 3.0.6可以正常工作,但在更新到3.0.7(或更高版本,如3.0.24)後,所有資源(@Path)都將丟失 - 404對於任何資源。 WAR在Apache Tomcat服務器下運行。RESTEasy註釋掃描無法找到資源(在Tomcat下)

我相信原因是與改變註釋掃描儀: https://issues.jboss.org/browse/RESTEASY-1010

我試圖創建延伸javax.ws.rs.core.Application,而不是web.xml配置的類。根據回答https://stackoverflow.com/a/29957040/2528366,空集應觸發掃描@Path,但沒有找到任何資源。如果我覆蓋返回非空集的getClasses(),那麼這些資源按預期工作。

的web.xml:https://pastebin.com/uRD2w6Z6

Application繼承類:

@ApplicationPath("/rest") 
public class WebApi extends Application 
{ 
    @Override 
    public Set<Class<?>> getClasses() 
    { 
     Set<Class<?>> s = new HashSet<>(); 
     // if line below is uncommented SomeResource works fine 
     // s.add(SomeResourceImpl.class); 
     return s; 
    } 
} 

資源是接口和實現是在派生類中。將註釋移動到類本身並不會改變任何內容。

註釋或配置有什麼問題?還是有其他需要觸發掃描註釋?

+0

如果在ApplicationPath中的'rest'之前刪除斜槓? – Dimitri

+0

@Dimitri我沒有看到任何區別,以相同的方式工作,如果設置爲空,沒有任何作用,如果沒有 - 增加資源工作。 –

回答

0

如果您使用的是Tomcat version是與Servlet 3.0規範兼容,你需要添加resteasy-servlet-initializer依賴性:

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-servlet-initializer</artifactId> 
     <version>${resteasy.version}</version> 
    </dependency> 

如文檔中表示:

RestEasy的使用ServletContainerInitializer Servlet 3.0容器中的集成接口初始化應用程序,自動掃描資源和提供程序。要啓用自動掃描,還必須在WAR文件中包含resteasy-servlet-initializer工件

+0

是的,我已經有了這種依賴。 –

+0

你有'beans.xml'文件嗎?你可以給你的應用程序配置更多的洞察力? – Dimitri

+0

不,我不知道。好吧,我會做一些最小的應用程序,沒有私人代碼和不必要的依賴關係。 –