protected ClientTokenContext getClientTokenContext(ContainerRequestContext rc) {
   ClientTokenContext ctx = null;
   if (clientTokenContextManager != null) {
     ctx = clientTokenContextManager.getClientTokenContext(mc);
     if (ctx != null) {
       ClientAccessToken newAt = refreshAccessTokenIfExpired(ctx.getToken());
       if (newAt != null) {
         ((ClientTokenContextImpl) ctx).setToken(newAt);
         clientTokenContextManager.setClientTokenContext(mc, ctx);
       }
     }
   }
   return ctx;
 }
  protected void processCodeResponse(
      ContainerRequestContext rc, UriInfo ui, MultivaluedMap<String, String> requestParams) {

    MultivaluedMap<String, String> state = null;
    if (clientStateManager != null) {
      state = clientStateManager.fromRedirectState(mc, requestParams);
    }

    String codeParam = requestParams.getFirst(OAuthConstants.AUTHORIZATION_CODE_VALUE);
    ClientAccessToken at = null;
    if (codeParam != null) {
      AuthorizationCodeGrant grant =
          new AuthorizationCodeGrant(codeParam, getAbsoluteRedirectUri(ui));
      grant.setCodeVerifier(state.getFirst(OAuthConstants.AUTHORIZATION_CODE_VERIFIER));
      at = OAuthClientUtils.getAccessToken(accessTokenServiceClient, consumer, grant);
    }
    ClientTokenContext tokenContext = initializeClientTokenContext(rc, at, state);
    if (at != null && clientTokenContextManager != null) {
      clientTokenContextManager.setClientTokenContext(mc, tokenContext);
    }
    setClientCodeRequest(tokenContext);
  }