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 TypeMethodDescriptionbooleanhandleResponse(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 retryresponse- Response to processsupportsRetry- Whether there will actually be a retry if this handler returntrue. 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
-