【问题标题】:How can I integrate Jersey with TomEE?如何将 Jersey 与 TomEE 集成?
【发布时间】:2014-01-13 09:27:47
【问题描述】:

我尝试在 Tomee 1.5.2 WebProfile 中使用 Jersey 1.18 部署一个非常简单的 RESTful Web 服务。 我的项目完全受到tomee-jersey-eclipselink 的启发

我通过删除持久性部分进一步简化的示例:Web 服务只是返回“Hello, World!”

@Path("/hello")
@RequestScoped
public class HelloService {

    public HelloService() {
    }

    @GET
    public String test() {
        return "Hello, World!";
    }
}

我的 POM 中的依赖项:

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.18</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.18</version>
    </dependency>
</dependencies>

我使用不可知的应用程序模型部署我的 Web 服务:

import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

public class JerseyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(HelloService.class);
        return classes;
    }
}

这是我的 web.xml:

<web-app>
  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>org.superbiz.service.JerseyApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

我还在 $TOMEE/conf/system.properties 中添加了以下属性:

com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true

Tomcat 7 一切正常(在这种情况下,我用 POM 中的 javax.enterprise:cdi-api:1.1 替换了 javax:javaee-api 依赖项),但是当我尝试使用 Tomee 时,我只得到 404 HTTP 状态,没有例外,也没有额外的日志消息。

每当我从 Eclipse IDE 或命令行中使用 Maven 部署应用程序时,结果都是一样的。

注意

  • 我不想将 Tomee JAX-RS 与 Apache CXF 一起使用,我不能 升级到 Tomee 1.6。
  • 我已经从 post 尝试了所有可能的方法,但没有帮助。

有什么想法吗?

【问题讨论】:

  • 您是否看到一些 Jersey 日志(即在部署期间)?
  • 实际上没有,我没有看到与 Jersey 相关的日志语句。我怀疑 javaee-api 是我所有问题的根源(我试图重新排序我的 POM 中的依赖项列表以重新排序类加载)。这个简约的项目应该可以帮助我在一个完全使用 CDI、JSF 等 JEE 功能的大型项目中重现和理解这个错误:所以,我不能没有对 javaee-api 的依赖。你知道一个 Jersey 类,我可以在其中放置一个相关的断点并查看发生了什么。附属问题:jersey-cdi神器是什么?对我有用吗?
  • 另一个精度:我的 web.xml 只包含上面列出的 servlet 映射。还有一个精度:在实际项目中,我可以看到我的提供程序和资源类由 Jersey 很好地加载(我在这里使用 PackagesResourceConfig)。感谢您的回复。

标签: rest maven jersey jax-rs apache-tomee


【解决方案1】:

在 TomEE 1.7.0 中解决了一个 issue 解决了这个问题。正如问题所指出的,您还需要将以下行添加到 catalina.properties:

openejb.classloader.forced-load=javax.ws.rs

这对我来说适用于 Jersey 2。

【讨论】:

  • 我尝试使用 jersey 1.18 并且我有这个异常:org.apache.openejb.OpenEJBException:创建应用程序失败:[..] com/sun/jersey/core/util/FeaturesAndProperties。 jersey-core maven 依赖还不够?
  • 此修复仅适用于 1.7 还是适用于 1.6 的解决方法?
  • 我没有尝试过 Jersey 1.x。这仅适用于 TomEE 1.7+,因为那时问题已得到解决。
猜你喜欢
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多