Over a million developers have joined DZone.

Binding Strategies for JAX-RS Filters and Interceptors

Target JAX-RS filters and interceptors with named and dynamic binding.

· Java Zone

Navigate the Maze of the End-User Experience and pick up this APM Essential guide, brought to you in partnership with CA Technologies

JAX-RS 2.0 defines multiple ways that server-side filters and interceptors can be bound to their target components.

  • Global Binding
  • Named Binding
  • Dynamic Binding

Global Binding

By default, JAX-RS filters and interceptors are bound to all the methods of resource classes in an application. That is, both request (pre and post) and response filters will be invoked whenever any resource method is invoked in response to an HTTP request by the client. This convention can be overridden using named binding or dynamic binding.

Named Binding

Filters and interceptors scoping can be handled in a fine-grained manner (based on per resource class/method):

// Step 1: Define a custom annotation with the @NamedBinding annotation
@NameBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Audited { }

// Step 2: Apply the custom annotation on the filter or interceptor
@Provider
@Audited
public class AuditFilter implements ContainerRequestFilter {
//filter implementation....
}

// Step 3: Apply the same annotation to the required resource class or method
@GET
@Path("{id}")
@Produces("application/json")
@Audited
public Response find(@PathParam("id") String custId){
//search and return customer info
} 

Note: If it is applied to a class, the filter/interceptor will be bound to all its resource methods.

Dynamic Binding

JAX-RS provides the DynamicFeature interface to help bind filters and interceptors dynamically at runtime. They can be used in tandem with the most static way of binding made possible using @NamedBinding:

public interface DynamicFeature {
    public void configure(ResourceInfo resInfo, FeatureContext ctx);
}

The injected instance of the ResourceInfo interface helps you choose the resource method in a dynamic fashion by exposing various methods, and the FeatureContext interface allows us to register the filter or interceptor once the resource method has been selected.

For more on JAX-RS 2.0…

Cheers!

Thrive in the application economy with an APM model that is strategic. Be E.P.I.C. with CA APM.  Brought to you in partnership with CA Technologies.

Topics:
java ,javaee ,jax rs

Published at DZone with permission of Abhishek Gupta, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}