[google/guava]重新公开在 Guava 22.0 中设为私有的构造函数和方法

2024-07-16 456 views
0

这组修订恢复了在 Guava 19.0 中引入并在 Guava 22.0 中设为私有的 SimpleTimeLimiter 类的构造函数和方法。这使得 Selenium 2 的 UrlChecker 类的客户端能够升级到最新的 Guava 版本以修复安全缺陷。

回答

8

您可以在此处看到受影响的类: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);
6

@Beta根据我们的政策,有问题的构造函数/方法是Guava 22 中弃用并在 23 中删除的 API @Beta。任何库都不应该使用@Beta这些 API,尽管不幸的是有些库多年来一直在使用这些 API,但我们不打算重新添加因此而被删除的 API。

8

@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接口的弃用/删除策略做出例外?

4

@cgdecker 有机会重新考虑这个问题吗?