Jersey ClientのRxサポートを軽〜く試す

Jersey 2.13がリリースされました。

リリースノートを見ると [JERSEY-2639] - Jersey Client - Add Support for Rx というのがあったので試してみましたん。

pom.xmlに突っ込むdependency

jersey-rx-clientの実装 には、

  • jersey-rx-client-guava
  • jersey-rx-client-java8
  • jersey-rx-client-jsr166e
  • jersey-rx-client-rxjava

があるっぽいですがRxJavaとかよく分かんないので今回はjava8で試します。

<dependency>
  <groupId>org.glassfish.jersey.ext.rx</groupId>
  <artifactId>jersey-rx-client-java8</artifactId>
</dependency>

クライアントコード

名前を渡したらこんにちは言ってくれるいつものリソースクラスがあったとします。

まずはふつうのJAX-RSクライアントのコード。

WebTarget target = ClientBuilder.newClient().target("http://localhost:8080/rest/hello");

String resp = target.queryParam("name", "world")
                    .request()
                    .get(String.class);

System.out.println(resp); //Hello, world!

うむ。普通。

次にRx板のコードです。

WebTarget target = ClientBuilder.newClient().target("http://localhost:8080/rest/hello");

CompletionStage<String> stage = RxCompletionStage.from(target)
                                    .queryParam("name", "world")
                                    .request()
                                    .rx()
                                    .get(String.class);

stage.thenAccept(s -> System.out.println(s)); //Hello, world!

ご覧の通り CompletionStage であれこれできるっぽいです。

まとめ

RxJava学ぼうかな。