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 Detail

      • handleResponse

        boolean handleResponse​(HttpRequest request,
                               HttpResponse response,
                               boolean supportsRetry)
                        throws java.io.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:
        java.io.IOException