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;
}
}
资源是接口和实现是在派生类中。将注释移动到类本身并不会改变任何内容。
注释或配置有什么问题?还是有其他需要触发扫描注释?
如果您使用的是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工件
是的,我已经有了这种依赖。 –
你有'beans.xml'文件吗?你可以给你的应用程序配置更多的洞察力? – Dimitri
不,我不知道。好吧,我会做一些最小的应用程序,没有私人代码和不必要的依赖关系。 –
如果在ApplicationPath中的'rest'之前删除斜杠? – Dimitri
@Dimitri我没有看到任何区别,以相同的方式工作,如果设置为空,没有任何作用,如果没有 - 增加资源工作。 –