BTW, I looked at the HttpClient code, and I see that in
AbstractHttpClient.execute, the call to director.execute has finished
completely before my ResponseHandler gets called.  In other words, the
chance for the retryHandler to kick in is already long gone by the time I
see the 503 in my ResponseHandler.

So I guess to refine my last question...is there an uber simple way to
induce a retry in the scenario where my ResponseHandler bumps into a 503?
Seems like I'm going to have to throw some specific exception up to my code
that's calling httpClient.execute, and handle it there...but is there an
out-of-the-box way to handle it?

Dan


On Thu, Jun 23, 2011 at 5:45 AM, Dan Checkoway <[email protected]> wrote:

> I'm doing this:
>
> httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(2,
> true));
> ...
> return httpClient.execute(new HttpGet(url), jsonResponseHandler, new
> BasicHttpContext());
>
> ...but when the server returns "503 Service Unavailable" I don't believe
> the retry handler is getting invoked.  My response handler looks like:
>
>     private static final class JsonResponseHandler implements
> ResponseHandler<Map> {
>         public Map handleResponse(HttpResponse httpResponse) throws
> java.io.IOException {
>             HttpEntity httpEntity = httpResponse.getEntity();
>             try {
>                 StatusLine statusLine = httpResponse.getStatusLine();
>                 switch (statusLine.getStatusCode()) {
>                 case 200: // Should be a valid JSON response
>                     return (Map)JSONValue.parseWithException(new
> InputStreamReader(httpEntity.getContent()));
>                 case 503:
>                 default:
>                     throw new
> HttpResponseException(statusLine.getStatusCode(), statusLine.toString());
>                 }
>                 ...
>
> I'm not 100% sure if throwing that HttpResponseException is causing the
> retry to get invoked, but I don't think it is.  Is there anything else I
> should be doing in that "case 503:" that would induce a retry automatically?
>
> Or do I need to wrap my own retry logic around the httpClient.execute
> call?  I'm sure I'm missing something simple.
>
> Dan
>

Reply via email to