Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.
This repository was archived by the owner on May 28, 2018. It is now read-only.

Jersey creates multiple provider instances if a class implements more than one provider interface #3796

Description

@mkarg

JAX-RS Specification 2.1 Chapter 4.1 Line 1: "By default a single instance of each provider class is instantiated for each JAX-RS application."

Jersey clearly violates this rule as it creates one instance of such a class per provider interface this class implements. For example, in case a class is annotated with @Provider and implements both ContainerRequestFilter and ContainerResponseFilter then Jersey creates two instances, instead one instance. In case this class additionally implements Feature then Jersey even creates a third instance.

Can be reproduce using the following code:

@Provider
public class MyProvider implements Feature, ContainerRequestFilter, ContainerResponseFilter {
	@Override
	public boolean configure(FeatureContext context) {
		System.out.println("Feature.this = " + this);
		return true;
	}
	@Override
	public void filter(ContainerRequestContext requestContext) {
		System.out.println("ContainerRequestFilter.this = " + this);
	}
	@Override
	public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
		System.out.println("ContainerResponseFilter.this = " + this);
	}

}

Here is the result it prints after the first invocation finished:

Feature.this = eu.headcrashing.bugs.MyProvider@6cee903a
...
ContainerRequestFilter.this = eu.headcrashing.bugs.MyProvider@575a86ae
ContainerResponseFilter.this = eu.headcrashing.bugs.MyProvider@69767b65

To be compliant to the mentioned chapter of the spec, the result MUST be this instead:

Feature.this = eu.headcrashing.bugs.MyProvider@6cee903a
...
ContainerRequestFilter.this = eu.headcrashing.bugs.MyProvider@6cee903a
ContainerResponseFilter.this = eu.headcrashing.bugs.MyProvider@6cee903a

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions