package org.icij.net.http;

import org.apache.http.NoHttpResponseException;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.protocol.HttpContext;

import java.io.IOException;

/**
 * Implements {@link HttpRequestRetryHandler} for retrying HTTP requests up to the given number of maximum attempts.
 *
 * Requests are only retried when no response is received from the server and not for any other kind of explicit,
 * permanent error.
 *
 * @author Matthew Caruana Galizia <mcaruana@icij.org>
 */
public class CountdownHttpRequestRetryHandler implements HttpRequestRetryHandler {

	public static final int DEFAULT_RETRIES = 3;

	private int countdown;

	public CountdownHttpRequestRetryHandler() {
		this(DEFAULT_RETRIES);
	}

	public CountdownHttpRequestRetryHandler(final int retries) {
		countdown = retries;
	}

	public boolean retryRequest(IOException exception, int executionCount, final HttpContext context) {
		return (exception instanceof NoHttpResponseException) && countdown-- > 0;
	}
}

package org.icij.net.http;

import org.apache.http.NoHttpResponseException;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.protocol.HttpContext;

import java.io.IOException;

/**
 * Implements {@link HttpRequestRetryHandler} for retrying HTTP requests up to the given number of maximum attempts.
 *
 * Requests are only retried when no response is received from the server and not for any other kind of explicit,
 * permanent error.
 *
 * @author Matthew Caruana Galizia <mcaruana@icij.org>
 */
public class CountdownHttpRequestRetryHandler implements HttpRequestRetryHandler {

	public static final int DEFAULT_RETRIES = 3;

	private int countdown;

	public CountdownHttpRequestRetryHandler() {
		this(DEFAULT_RETRIES);
	}

	public CountdownHttpRequestRetryHandler(final int retries) {
		countdown = retries;
	}

	@Override
	public boolean retryRequest(IOException exception, int executionCount, final HttpContext context) {
		return (exception instanceof NoHttpResponseException) && countdown-- > 0;
	}
}

Annotate override