使用JAX-RS而不是特定于实现

Fat*_*sis 0 java jax-rs

我有一个服务,我想以几乎相同的方式在一些项目中消费.我想简化向这些项目发送数据和从这些项目接收数据的过程,因此我想创建一个客户端jar来处理打包和解包jaxrs响应/请求的过程,并将其包含在我的其他项目中.

但是,要使用任何jax-rs对象,我必须依赖于jax-rs的特定实现.在我的小客户端库中,我必须包含jersey(或resteasy或cxf)才能访问任何jax-rs导入.如果我将这个jar包含在我的任何其他项目中,他们也将被迫使用该休息实现.

有没有办法创建一个利用jax-rs对象的单个项目jar,它将使用消费容器的jax-rs实现,而不是只有许多几乎相同的客户端项目,只包含不同的jax-rs实现?

从本质上讲,我希望我的项目大战能够包含一个jar,它将处理打包和解包jax-rs rest对象,这些对象使用war项目使用的jax-rs的任何实现.

cas*_*lin 5

javax.ws.rs.*包中的类是可移植的,并且可以在不同的JAX-RS实现中工作.使用以下依赖项:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

以下包中的类是特定于实现的,当您希望代码可以跨不同实现移植时,您不希望直接使用它们:

  • 球衣号码: org.glassfish.jersey.*

  • 高枕无忧: org.jboss.resteasy.*

  • Apache CXF: org.apache.cxf.jaxrs.*

但是,这些类必须在运行时期间位于类路径中.


JAX-RS客户端API在JAX-RS 2.0中引入,并在具有反应功能的JAX-RS 2.1中得到增强.有关详细信息,请查看API 文档.

以前的JAX-RS 2.0,任何客户端支持都是特定于供应商的,不可移植.大多数供应商提供的基于代理的客户端也不可移植.

JAX-RS客户端API可以按如下方式使用:

Client client = ClientBuilder.newClient();
Response response = client.target("http://example.org/hello").request("text/plain").get();
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,javax.ws.rs.client.Client将使用javax.ws.rs.client.ClientBuilderJAX-RS实现提供程序提供的默认实现类创建实例.


如果您有兴趣,请查看实施文档Client: