【发布时间】:2014-09-23 17:52:20
【问题描述】:
我有一个项目,它基本上是一个 Apache Wicket Web 应用程序,但它也有 3 个 REST 服务。我想将这两种不同的技术放在一个应用程序中,因为它们共享相当多的类。另外,我希望它们共享同一个 JPA 实例,因为它们在同一个数据库上运行。
我面临的问题是,一旦指定了任何 JAX-RS 路径,发送到应用程序的所有 URL 似乎都由 JAX-RS 处理,即使指定的 REST 路径不能证明这一点。具体来说:
@PATH("service")
public class ServiceClassA
@PATH("s1")
public String someMethod...
@PATH("service")
public class ServiceClassB
...
请注意,因此所有定义的服务都有一个以“MyAppName/service/...”开头的 URI。
Wicket 类不受此影响,因为 Wicket 过滤器可能在 JAX-RS 有机会获取 URL 之前运行。但是像 css 文件这样的普通资源会落入 JAX-RS 的手中,从而导致
No root resource matching request path browser/xxx.css has been found, Relative Path: /browser/xxx.css.
除了上面显示的服务方法之外,JAX-RS 端点还包含一个通用端点:
REST Application: http://localhost:8080/MyAppName/ -> org.apache.openejb.server.rest.InternalApplication
只要我删除所有@PATH 注释,我的 css 就会正常服务。所以我怀疑刚刚显示的端点是自动生成的,并导致我的应用程序的任何 URI 都由 REST 框架处理,即使没有为它定义路径。所以我基本上需要的是告诉 JAX-RS 忽略
- 不是所有不以“MyAppName/service”开头的 URI,
- 或所有以“MyAppName/browser”开头的 URI,
- 或将其无法处理的所有 URI 重定向到标准 Web 服务器机制。
我尝试并搜索了很多可能的配置选项,但我仍然没有找到适合这种简单要求的任何东西。我会很感激任何提示。
顺便说一句,我的 web.xml 很普通。它包含 wicket 过滤器,映射到 /*,没有其他内容,特别是没有用于 JAX-RS 的过滤或 servlet。服务器是 TomEE-plus 1.6.0.2,而 JAX-RS 库是 TomEE 附带的。
【问题讨论】:
标签: rest jax-rs apache-tomee