在JAX-RS存在的情况下获取简单内容

时间:2014-07-31 16:57:10

标签: rest jax-rs tomee

我有一个基本上是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忽略

  • 要么所有URI都不以“MyAppName / service”开头,
  • 或以“MyAppName / browser”开头的所有URI,
  • 或将其无法处理的所有URI重定向到标准Web服务器机制。

我对可能的配置选项进行了很多实验和搜索,但我仍然找不到任何适合这种简单要求的东西。我很感激任何提示。

BTW,我的web.xml很简单。它包含wicket过滤器,映射到/ *,没有别的,特别是没有JAX-RS的过滤或servlet。服务器是TomEE-plus 1.6.0.2,JAX-RS库是TomEE附带的库。

1 个答案:

答案 0 :(得分:0)

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

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