我有一个基本上是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 /...".
开头的URIWicket类不受此影响,因为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忽略
我对可能的配置选项进行了很多实验和搜索,但我仍然找不到任何适合这种简单要求的东西。我很感激任何提示。
BTW,我的web.xml很简单。它包含wicket过滤器,映射到/ *,没有别的,特别是没有JAX-RS的过滤或servlet。服务器是TomEE-plus 1.6.0.2,JAX-RS库是TomEE附带的库。答案 0 :(得分:0)
JAX-RS是一个servlet,因此不将其绑定到应用程序的子上下文,它与资源冲突。您可以Application
提供@Application("subcontext")
。
注意:TomEE支持排除某些静态资源,但配置在openejb-jar(https://issues.apache.org/jira/browse/TOMEE-728)中是显式的,因此第一个解决方案更容易。