有人知道像Apache CXF为REST提供的Jersey客户机代理实现吗?



Apache CXF项目为REST服务提供了基于代理的客户端实现。这看起来像:

Resource resource = JAXRSClientFactory.create( baseAddress, Resource.class )

有人知道Jersey的类似实现吗?

我发现了一种使用@HyperMediaController注释的方法,但我想坚持使用JSR-311默认注释,如@Path@Get

有人知道吗?

代理实现是存在的,但不幸的是,在版本2.22.1的Jersey Client API文档(Jersey User Guide中也没有)中甚至没有提到。

我找到的是WebResourceFactory的JavaDoc,更好的是JavaDoc包。下面是JavaDoc中关于WebResourceFactory使用的一个片段:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/");
MyResourceIfc resource = WebResourceFactory.newResource(MyResourceIfc.class, target);
在Maven中,你需要:
    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-proxy-client</artifactId>
        <version>2.22.1</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.22.1</version>
    </dependency>

我发现WebResourceFactory不支持泛型类型,而且它的源代码真的很难理解。所以我们创建了https://github.com/adaptris/jaxrs-client-proxy,目前我们正在开发它。

要使用它,你需要构建一个资源:

ResourceBuilder builder = new ResourceBuilder();
resource = builder.
    url("https://host/api").
    build(Resource.class);
client = resource.get();

然后您可以调用client -它是jax-rs注释描述的接口(Resource.class)的代理。根据jax-rs客户端api的建议,您应该在停止使用资源后关闭它。

resource.close()

我创建了一个自己的实现。请参阅utils- api派生的wiki页面。

最新更新