我想要以几乎相同的方式在一些项目中使用我的服务。我想简化向这些项目发送数据和从这些项目接收数据的过程,因此我想创建一个客户端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的任何实现。
答案 0 :(得分:5)
javax.ws.rs.*
包中的类是可移植的,并且可以在不同的JAX-RS实现中使用。使用以下依赖项:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>
以下软件包中的类是特定于实现的,当您希望代码可以跨不同实现移植时,您不希望直接使用它们:
泽西岛:org.glassfish.jersey.*
RESTEasy:org.jboss.resteasy.*
Apache CXF:org.apache.cxf.jaxrs.*
但是,在运行时期间,这些类必须位于类路径中。
JAX-RS客户端API在JAX-RS 2.0中引入,并在具有反应功能的JAX-RS 2.1中得到增强。有关详细信息,请查看API documentation。
在JAX-RS 2.0之前,任何客户端支持都是特定于供应商的,而不是可移植的。大多数供应商提供的基于代理的客户端也不可移植。
JAX-RS Client API可以按如下方式使用:
Client client = ClientBuilder.newClient();
Response response = client.target("http://example.org/hello").request("text/plain").get();
在上面的代码中,将使用JAX-RS实现提供程序提供的默认javax.ws.rs.client.Client
实现类创建javax.ws.rs.client.ClientBuilder
实例。
如果您有兴趣,请查看Client
实施的文档: