我试图用旧的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;
}
}
资源是接口,实现在派生类中。将注释移动到类本身不会改变任何内容。
注释或配置有什么问题?或者是否还需要其他东西来触发扫描注释?
答案 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工件