3

关于异常处理的 HTTP 公共客户端 4.12教程部分清楚地表明,应该能够通过执行以下操作来设置请求重试处理程序......

httpclient.setHttpRequestRetryHandler(myRetryHandler);

在eclipse中我试过了,它报告HttpClient没有这样的方法。它建议我让客户AbstractHttpClient然后打电话。setHttpRequestRetryHandler像这样:

((AbstractHttpClient) httpclient).setHttpRequestRetryHandler(myRetryHandler);

那么我的代码就可以工作了,但是文档和 API 之间的这种差异让我想知道我是否在做我不应该做的事情。

文件是错误的还是我?

4

2 回答 2

4

你完全正确。该文档使用了一个具体的DefaultHttpClient(它是该方法的子类,AbstractHttpClient也是该setHttpRequestRetryHandler()方法的子类。

当您做正确的事情并对HttpClient接口进行编程时(遗憾的是,它没有公开该方法),您必须进行令人讨厌的演员阵容。

看起来 Apache 团队已经决定以HttpClient牺牲客户端代码为代价来保持界面超级干净:-(

于 2011-11-21T00:42:40.427 回答
3

在这种情况下使用 HttpClient 的正确方法是使用AutoRetryHttpClient,它接受DefaultServiceUnavailableRetryStrategy。一个可能的原因是 AutoRetryHttpClient 实现了 HttpClient 接口而不是扩展 AbstractHttpClient。在这种情况下不需要铸造。

DefaultServiceUnavailableRetryStrategy retryStrategy = new DefaultServiceUnavailableRetryStrategy(5, 50);
AutoRetryHttpClient          httpClient = new AutoRetryHttpClient(retryStrategy);
于 2013-04-10T00:47:24.543 回答