adam bien's blog

Fetching content reactively with JAX-RS 2.1 client and Java EE 8 📎

Java EE 8 with JAX-RS 2.1 / JSR-370 introduced a JAX-RS Client API integrated with CompletionStage (aka reactive client).

Now an asynchronous request may return a Java 8 CompletionStage which allows a pipeline-style programming:


import java.util.concurrent.CompletionStage;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import org.junit.Before;
import org.junit.Test;


public class ReactiveClientTest {

    private WebTarget tut;

    @Before
    public void initClient() {
        this.tut = ClientBuilder.
        newClient().target("http://airhacks.com");
    }


    @Test
    public void reactive() throws InterruptedException {
        CompletionStage<Response> stage = this.tut.
                request().
                rx().
                get();
        stage.
                thenApply(req -> req.readEntity(String.class)).
                thenAccept(System.out::println);
        Thread.sleep(500);
    }

}

The JAX-RS 2.1 client requires the following dependencies:


<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.26</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.26</version>        
</dependency>

See you at Java EE 8 on Java 9, at Munich Airport, Terminal 2