我有一个服务,我想在几个项目中使用基本相同的方式。我想简化向这些项目发送和接收数据的过程,因此我想制作一个客户端jar,它处理打包和解压缩jaxrs响应/请求的过程,并将其包括在我的其他项目中。
然而,要使用任何jax-rs对象,我必须依赖于jax-rs的特定实现。在我的小客户端库中,我必须包括jersey (或resteasy或cxf)才能访问任何jax-rs导入。如果我将这个jar包含在我的任何其他项目中,他们也将被迫使用rest实现。
是否有一种方法可以创建一个利用jax-rs对象的项目jar,它将使用消费容器的jax-rs实现,而不是拥有许多几乎相同的客户机项目,其中只包含不同的jax-rs实现?
本质上,我希望我的项目war包括一个jar,它将处理打包和解压缩jax-rs rest对象,这些对象使用war项目使用的jax-rs实现。
发布于 2018-04-20 09:48:24
来自javax.ws.rs.*
包的类是可移植的,并且可以跨不同的JAX实现工作。使用以下依赖项:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>
以下包中的类是特定于实现的,当您希望代码跨不同实现可移植时,您不希望直接使用它们:
org.glassfish.jersey.*
org.jboss.resteasy.*
org.apache.cxf.jaxrs.*
但是,在运行时,此类类必须位于类路径中。
JAX客户端API是在JAX-RS2.0中引入的,并在JAX-RS2.1中进行了增强,具有反应能力。有关详细信息,请查看API 文档。
以前的JAX-RS2.0,任何客户端支持都是特定于供应商的,而不是可移植的。大多数供应商提供的基于代理的客户端也是不可移植的。
JAX-RS客户端API可以按以下方式使用:
Client client = ClientBuilder.newClient();
Response response = client.target("http://example.org/hello").request("text/plain").get();
在上面的代码中,将使用JAX实现提供程序提供的默认javax.ws.rs.client.Client
实现类创建一个javax.ws.rs.client.ClientBuilder
实例。
如果您感兴趣,请查看Client
实现的文档:
org.glassfish.jersey.client.JerseyClient
org.jboss.resteasy.client.jaxrs.ResteasyClient
org.apache.cxf.jaxrs.client.spec.ClientImpl
https://stackoverflow.com/questions/49909529
复制相似问题