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

时间:2017-10-06 15:13:17

标签: java tomcat resteasy

我试图用旧的RESTEasy 3.0.5更新WAR更新的东西。 3.0.6工作正常,但在更新到3.0.7(或更高,如3.0.24)后,所有资源(@Path)都会丢失 - 任何资源都会丢失404。 WAR在Apache 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;
    }
}

资源是接口,实现在派生类中。将注释移动到类本身不会改变任何内容。

注释或配置有什么问题?或者是否还需要其他东西来触发扫描注释?

1 个答案:

答案 0 :(得分:0)

如果您使用与Servlet 3.0规范兼容的Tomcat version,则需要添加resteasy-servlet-initializer依赖项:

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

如文件中所述:

  

Resteasy使用Servlet 3.0容器中的ServletContainerInitializer集成接口来初始化应用程序,自动扫描资源和提供程序。要启用自动扫描,还必须在WAR文件中包含resteasy-servlet-initializer工件