PerRequestTypeInjectableProvider equivalent in Jersey2

33 views Asked by At

What is the equivalent of PerRequestTypeInjectableProvider in Jersey2?

I've tries to use AbstractBinder but it doesn't seem to work. The Seesion I'm trying to inject is always null.

I tried to replace jersey-1 old code

public class UserSessionProvider extends PerRequestTypeInjectableProvider<Context, Session> {

  @Context HttpServletRequest request;

  public UserSessionProvider() {
    super(Session.class);
  }

  @Override
  public Injectable<Session> getInjectable(ComponentContext cc, Context context) {
    return new Injectable<Session>() {

      @Override
      public Session getValue() {
        Session session = SessionUtils.createSession(request);
        request.setAttribute(WebSessionConfig.s.servlet_attribute_name, session);
        return session;
      }
    };
  }
}

with jersey-2 new code, replacing PerRequestTypeInjectableProvider with AbstractBinder:

public class UserSessionProvider extends AbstractBinder {

  private static final Logger logger = Logger.getLogger(UserSessionProvider.class);

  @Context HttpServletRequest request;

  @Override
  protected void configure() {
    bind(SessionResolver.class).to(Session.class);
  }

  public class SessionResolver implements InjectionResolver<Session> {

    @Override
    public Object resolve(Injectee injectee, ServiceHandle<?> root) {

      Session session = SessionUtils.createSession(request);
      request.setAttribute(WebSessionConfig.s.servlet_attribute_name, session);
      return session;
    }

    @Override
    public boolean isConstructorParameterIndicator() {
      return true;
    }

    @Override
    public boolean isMethodParameterIndicator() {
      return true;
    }
  }
}
1

There are 1 answers

0
user7080065 On

The issue was that the package was not registered.