1

我有一个带有一些 JAX-RS 服务的 WAR,部署到 TomEE Plus 中。给定一个用 注释的服务@Path("myservice"),TomEE+ 将其发布到localhost:8080/mywebapp/myservice.

然而,这也使得访问 JSPlocalhost:8080/mywebapp/index.jsp变得不可能——JAXRSInInterceptor 抱怨说No root resource matching request path has been found, Relative Path: /index.jsp.

所以我想api为所有服务配置一个路径前缀,将myserviceURL 更改为localhost:8080/mywebapp/api/myservice. 如果我自己配置​​了 CXF(有或没有 Spring),这样做将是微不足道的,因为我可以简单地更改 CXF Servlet 的 URL 模式 - 但我依赖于默认设置,除了注释。那么在这种情况下我该怎么做呢?

请注意,我不想更改@Path注释以包含前缀,因为这并不能解决 JSP 的问题。

4

2 回答 2

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同时使您的 Web 资源 (.jsp) 在/mywebapp.

于 2013-07-19T12:21:19.633 回答
1

TomEE trunk 支持以下配置:cxf.jaxrs.staticSubresourceResolution & cxf.jaxrs.static-resources-list

但@ApplicationPath 是更相关的解决方案 IMO

在某些情况下,使用 -Dopenejb.webservice.old-deployment=true 也有帮助

于 2013-07-21T17:13:43.817 回答