我有一些带有一些JAX-RS服务的WAR,部署到TomEE Plus中。如果使用@Path("myservice")
注释的服务,TomEE +会将其发布到localhost:8080/mywebapp/myservice
。
然而,这也使localhost:8080/mywebapp/index.jsp
访问JSP变得不可能--JAXRSInInterceptor抱怨No root resource matching request path has been found, Relative Path: /index.jsp
。
所以我想为所有服务配置路径前缀api
,这会将myservice
网址更改为localhost:8080/mywebapp/api/myservice
。如果我自己配置了CXF(有或没有Spring),那么这样做会很简单,因为我可以简单地改变CXF Servlet的URL模式 - 但我依赖于默认设置,除了注释。那么在这种情况下我该怎么做?
请注意,我不想更改@Path
注释以包含前缀,因为这不能解决JSP的问题。
答案 0 :(得分:2)
创建javax.ws.rs.core.Application的扩展名,并使用@ApplicationPath对其进行注释,其中值为api
:
@ApplicationPath("/api")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<Class<?>>();
// register root resource
classes.add(MyServiceResource.class);
return classes;
}
}
这样,Servlet 3容器可以找到您的应用程序并将您的资源映射到/mywebapp/api/myservice
,同时在/mywebapp
处提供您的网络资源(.jsp)。
答案 1 :(得分:1)
TomEE trunk支持以下配置:cxf.jaxrs.staticSubresourceResolution&amp; cxf.jaxrs.static资源列表
但@ApplicationPath是更相关的解决方案IMO
在某些情况下使用-Dopenejb.webservice.old-deployment = true也有帮助