RESTEasy注释扫描无法找到资源(在Tomcat下)

问题描述:

我试图用旧的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我没有看到任何区别,以相同的方式工作,如果设置为空,没有任何作用,如果没有 - 增加资源工作。 –

如果您使用的是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

不,我不知道。好吧,我会做一些最小的应用程序,没有私人代码和不必要的依赖关系。 –