Apache CXF 运行时 JAX RS 前端和 'javax.ws.rs'(来自 Oracle)之间的区别

Difference between Apache CXF Runtime JAX RS Frontend and 'javax.ws.rs' (from Oracle)

我正在为一个项目开发 Web 服务,我应该为 'javax.ws.rs' 和 'javax.ws.rs.core' 添加对 pom 文件的依赖。因为我使用 Apache CXF 来实现所需的 REST API。我有几个问题:

  1. 这是什么 'javax.ws.rs' (from Oracle),这只是 JAx-RS API 规范吗?如果这是真的,它只有 APIs 那么它有什么帮助?为什么我们不只使用 apache cxf 或 jersey 并将其添加为对 maven 的依赖?

2.To实现我肯定要用'Apache CXF Runtime JAX RS Frontend',那么'javax.ws.rs'和'Apache CXF'有什么区别。

如果我的问题没有意义,但它以不同的方式有意义,请重新表述我的问题。

  1. javax.ws.rs is the package that contains the JAX-RS API Specification。它只包含接口,因此要在项目中使用 jax-rs,您将需要这些接口的实现,例如 Jersey 或 CXF。
  2. (我猜 1 也已经回答了这个)。

在其他情况下也会发生同样的情况,例如 JAX-WS,您拥有 API 规范并且需要一个实现才能实际使用它。在这种情况下,JAX-WS 参考实现已包含在 jdk 中,您无需再提供一个,但如果您愿意,可以提供 CXF JAX-WS 实现。

Maven 依赖关系

当您使用 CXF 或 Jersey 时,您不需要为 javax.ws.rs 显式包含依赖项,因为它已经作为传递依赖项包含在内,这意味着它将自动下载。

在您的情况下,要使用 CXF,您需要在 pom 文件中添加这些依赖项:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>${cxf.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>${cxf.version}</version>
</dependency>

就是这样,您不需要为 javax.ws.rs 添加任何依赖项。