Registering Filters per JAX-RS client

In this post under JAX-RS Client, I will show with example how to configure filters per client.

For our example we need to create two filters one to intercept requests and another to intercept responses as shown below

Request Filter


package defaultPackage;

import java.io.IOException;

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

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");
    }
}

Below is the complete main class code for your reference.

Main class


1  package defaultPackage;
2  
3  import jakarta.ws.rs.client.Client;
4  import jakarta.ws.rs.client.ClientBuilder;
5  import jakarta.ws.rs.client.Invocation;
6  import jakarta.ws.rs.client.WebTarget;
7  import jakarta.ws.rs.core.Response;
8  
9  public class Example16 {
10     public static void main(String[] args) {
11         Client client = ClientBuilder.newClient();
12         MyClientRequestFilter myClientRequestFilter = new MyClientRequestFilter();
13         MyClientResponseFilter myClientResponseFilter = new MyClientResponseFilter();
14         client = client.register(myClientRequestFilter);
15         client = client.register(myClientResponseFilter);
16         try {
17             WebTarget webTarget = client.target("https://jsonplaceholder.typicode.com/users/2");
18             Invocation.Builder builder = webTarget.request();
19             Invocation invocation = builder.buildGet();
20             Response response = invocation.invoke();
21             if(response.getStatus() == 200) {
22                 System.out.println("Successful");
23                 String result = response.readEntity(String.class);
24                 System.out.println(result);
25             } else {
26                 System.out.println("Failed");
27             }
28             
29             webTarget = client.target("https://reqres.in/api/users/2");
30             builder = webTarget.request();
31             invocation = builder.buildGet();
32             response = invocation.invoke();
33             if(response.getStatus() == 200) {
34                 System.out.println("Successful");
35                 String result = response.readEntity(String.class);
36                 System.out.println(result);
37             } else {
38                 System.out.println("Failed");
39             }
40         } finally {
41             client.close();
42         }
43     }
44 }

In the above code, at line 11, we create an instance of JAX-RS “Client” class.

At line 12 and 13, we create “myClientRequestFilter” and “myClientResponseFilter” instances.

At line 14 and 15, we register the filters with the client instance by calling the “register” method on the “Client” instance.

In this way we configure the filters for client.

Below is the output.

Output


MyClientRequestFilter
MyClientResponseFilter
Successful
{
  "id": 2,
  "name": "Ervin Howell",
  "username": "Antonette",
  "email": "Shanna@melissa.tv",
  "address": {
    "street": "Victor Plains",
    "suite": "Suite 879",
    "city": "Wisokyburgh",
    "zipcode": "90566-7771",
    "geo": {
      "lat": "-43.9509",
      "lng": "-34.4618"
    }
  },
  "phone": "010-692-6593 x09125",
  "website": "anastasia.net",
  "company": {
    "name": "Deckow-Crist",
    "catchPhrase": "Proactive didactic contingency",
    "bs": "synergize scalable supply-chains"
  }
}
MyClientRequestFilter
MyClientResponseFilter
Successful
{"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"https://reqres.in/img/faces/2-image.jpg"},"support":{"url":"https://reqres.in/#support-heading","text":"To keep ReqRes free, contributions towards server costs are appreciated!"}}

Leave a Reply