5
这组修订恢复了在 Guava 19.0 中引入并在 Guava 22.0 中设为私有的 SimpleTimeLimiter 类的构造函数和方法。这使得 Selenium 2 的 UrlChecker 类的客户端能够升级到最新的 Guava 版本以修复安全缺陷。
这组修订恢复了在 Guava 19.0 中引入并在 Guava 22.0 中设为私有的 SimpleTimeLimiter 类的构造函数和方法。这使得 Selenium 2 的 UrlChecker 类的客户端能够升级到最新的 Guava 版本以修复安全缺陷。
您可以在此处看到受影响的类:UrlChecker
第 64 行至第 105 行:
private final TimeLimiter timeLimiter;
public UrlChecker() {
this(new SimpleTimeLimiter(THREAD_POOL));
}
@VisibleForTesting
UrlChecker(TimeLimiter timeLimiter) {
this.timeLimiter = timeLimiter;
}
public void waitUntilAvailable(long timeout, TimeUnit unit, final URL... urls)
throws TimeoutException {
long start = System.nanoTime();
log.fine("Waiting for " + Arrays.toString(urls));
try {
timeLimiter.callWithTimeout(new Callable<Void>() {
public Void call() throws InterruptedException {
...
}
}, timeout, unit, true);
@Beta
根据我们的政策,有问题的构造函数/方法是Guava 22 中弃用并在 23 中删除的 API @Beta
。任何库都不应该使用@Beta
这些 API,尽管不幸的是有些库多年来一直在使用这些 API,但我们不打算重新添加因此而被删除的 API。
@cgdecker 我理解 Selenium 实现者使用@Beta
接口的决定是不明智的,但在切换到最终形式之前,Selenium 2 的开发就停止了TimeLimiter
。Selenium 3 不使用此@Beta
接口,但像我这样仍然需要支持 Java 7 的人无法升级到 Selenium 3。构造函数/方法仍然存在于 SimpleTimeLimiter 类中......它们只是private
,并且相应的变体callWithTimeout
已从TimeLimiter
接口中删除。由于 Selenium 2 浏览器驱动程序依赖于 SimpleTimeLimiter,我目前无法将 Guava 升级到 19.0 以上的任何版本。这使我容易受到无限制内存分配问题的影响,该问题已在后续的 Guava 版本中得到解决。在这种情况下,您是否有可能对@Beta
接口的弃用/删除策略做出例外?
@cgdecker 有机会重新考虑这个问题吗?