【问题标题】:GETting plain content in presence of JAX-RS在存在 JAX-RS 的情况下获取纯内容
【发布时间】: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


    【解决方案1】:

    JAX-RS 是一个 servlet,因此如果不将其绑定到应用程序的子上下文,它会与资源冲突。您可以提供Application@Application("subcontext")

    注意:TomEE 支持排除一些静态资源,但配置在 openejb-jar (https://issues.apache.org/jira/browse/TOMEE-728) 中是明确的,因此第一个解决方案更容易。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 2016-02-06
    • 2010-12-21
    • 1970-01-01
    • 2022-10-16
    • 2023-03-20
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多