Registering Filters for all clients

In this post under JAX-RS Client, I will show how to register filters for all clients.

In the previous posts, I showed with examples how to register filters per client and per web target.

Sometimes we want to register a fixed set of filters for all clients.

These fixed set of filters will be automatically available for all clients created using ClientBuilder api.

For our example we use the below request and response filters.

Request Filter


package defaultPackage;

import java.io.IOException;

import jakarta.ws.rs.client.ClientRequestContext;
import jakarta.ws.rs.client.ClientRequestFilter;

public class MyClientRequestFilter implements ClientRequestFilter {
    @Override
    public void filter(ClientRequestContext clientRequestContext) throws IOException {
        System.out.println("MyClientRequestFilter");
    }
}

Response Filter


package defaultPackage;

import java.io.IOException;

import jakarta.ws.rs.client.ClientRequestContext;
import jakarta.ws.rs.client.ClientResponseContext;
import jakarta.ws.rs.client.ClientResponseFilter;

public class MyClientResponseFilter implements ClientResponseFilter {
    @Override
    public void filter(ClientRequestContext clientRequestContext, ClientResponseContext clientResponseContext) throws IOException {
        System.out.println("MyClientResponseFilter");
    }
}

To make these filters available for all clients, we register these filters at ClientBuilder level as shown below in the code snippet


    ClientBuilder clientBuilder = ClientBuilder.newBuilder();
    MyClientRequestFilter myClientRequestFilter = new MyClientRequestFilter();
    MyClientResponseFilter myClientResponseFilter = new MyClientResponseFilter();
    clientBuilder.register(myClientRequestFilter);
    clientBuilder.register(myClientResponseFilter);

As shown in the above code snippet, first we create an instance of “ClientBuilder” class.

Then we register those filters by calling the “register” method of “ClientBuilder” class and passing the filter instances as an argument to the method.

Now any number of “Client” instances created using the “ClientBuilder” instance will automatically have those filters.

In this way we can register filters for all clients.

Below is the complete main code for your reference.

Main Class


package defaultPackage;

import jakarta.ws.rs.client.Client;
import jakarta.ws.rs.client.ClientBuilder;
import jakarta.ws.rs.client.Invocation;
import jakarta.ws.rs.client.WebTarget;
import jakarta.ws.rs.core.Response;

public class Example17 {
    public static void main(String[] args) {
        ClientBuilder clientBuilder = ClientBuilder.newBuilder();
        MyClientRequestFilter myClientRequestFilter = new MyClientRequestFilter();
        MyClientResponseFilter myClientResponseFilter = new MyClientResponseFilter();
        clientBuilder.register(myClientRequestFilter);
        clientBuilder.register(myClientResponseFilter);

        Client client = clientBuilder.build();
        try {
            WebTarget webTarget = client.target("https://jsonplaceholder.typicode.com/users/2");
            Invocation.Builder builder = webTarget.request();
            Invocation invocation = builder.buildGet();
            Response response = invocation.invoke();
            if(response.getStatus() == 200) {
                System.out.println("Successful");
                String result = response.readEntity(String.class);
                System.out.println(result);
            } else {
                System.out.println("Failed");
            }
        } finally {
            client.close();
        }

        client = clientBuilder.build();
        try {
            WebTarget webTarget = client.target("https://reqres.in/api/users/2");
            Invocation.Builder builder = webTarget.request();
            Invocation invocation = builder.buildGet();
            Response response = invocation.invoke();
            if(response.getStatus() == 200) {
                System.out.println("Successful");
                String result = response.readEntity(String.class);
                System.out.println(result);
            } else {
                System.out.println("Failed");
            }
        } finally {
            client.close();
        }
    }
}

Leave a Reply