如何在TomEE +中配置JAX-RS基本路径?

时间:2013-07-19 06:55:37

标签: cxf jax-rs apache-tomee

我有一些带有一些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的问题。

2 个答案:

答案 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也有帮助