Interface HttpUnsuccessfulResponseHandler

All Known Implementing Classes:
HttpBackOffUnsuccessfulResponseHandler, MockHttpUnsuccessfulResponseHandler

public interface HttpUnsuccessfulResponseHandler
Interface which handles abnormal HTTP responses (in other words not 2XX).

For example, this might be used to refresh an OAuth 2 token:

  public static class RefreshTokenHandler implements HttpUnsuccessfulResponseHandler {
    public boolean handleResponse(
        HttpRequest request, HttpResponse response, boolean retrySupported) throws IOException {
      if (response.getStatusCode() == HttpStatusCodes.STATUS_CODE_UNAUTHORIZED) {
        refreshToken();
      }
      return false;
    }
  }
 

Sample usage with a request factory:

  public static HttpRequestFactory createRequestFactory(HttpTransport transport) {
    final RefreshTokenHandler handler = new RefreshTokenHandler();
    return transport.createRequestFactory(new HttpRequestInitializer() {
      public void initialize(HttpRequest request) {
        request.setUnsuccessfulResponseHandler(handler);
      }
    });
  }
 

More complex usage example:

  public static HttpRequestFactory createRequestFactory2(HttpTransport transport) {
    final RefreshTokenHandler handler = new RefreshTokenHandler();
    return transport.createRequestFactory(new HttpRequestInitializer() {
      public void initialize(HttpRequest request) {
        request.setUnsuccessfulResponseHandler(new HttpUnsuccessfulResponseHandler() {
          public boolean handleResponse(
              HttpRequest request, HttpResponse response, boolean retrySupported)
              throws IOException {
            return handler.handleResponse(request, response, retrySupported);
          }
        });
      }
    });
  }
 
Since:
1.4
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    handleResponse(HttpRequest request, HttpResponse response, boolean supportsRetry)
    Handler that will be invoked when an abnormal response is received.
  • Method Details

    • handleResponse

      boolean handleResponse(HttpRequest request, HttpResponse response, boolean supportsRetry) throws IOException
      Handler that will be invoked when an abnormal response is received. There are a few simple rules that one must follow:
      • If you modify the request object or modify its execute interceptors in a way that should resolve the error, you must return true to issue a retry.
      • Do not read from the content stream, this will prevent the eventual end user from having access to it.
      Parameters:
      request - Request object that can be read from for context or modified before retry
      response - Response to process
      supportsRetry - Whether there will actually be a retry if this handler return true. Some handlers may want to have an effect only when there will actually be a retry after they handle their event (e.g. a handler that implements exponential backoff).
      Returns:
      Whether or not this handler has made a change that will require the request to be re-sent.
      Throws:
      IOException