java - InternetDomainName 和 publicsuffix 列表

标签 java classpath guava

Guava 21 InternetDomainName API 使用哪个版本的公共(public)后缀列表( https://publicsuffix.org/ )?

解析 keyupgrade.spaceforupdate.download 结果

scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
java.lang.IllegalStateException: Not under a public suffix: keyupgrade.spaceforupdate.download
  at com.google.common.base.Preconditions.checkState(Preconditions.java:176)
  at com.google.common.net.InternetDomainName.topPrivateDomain(InternetDomainName.java:445)
  ... 50 elided

但根据 https://publicsuffix.org/list/public_suffix_list.dat,.download 是一个有效的公共(public)后缀. 我认为 Guava 21 使用的是旧版本的 publicsuffix 列表。有没有办法更新它?谢谢!

最佳答案

我很确定你有一个 Guava v14 jar在你的类路径上,可能是 in addition to你认为你正在使用的 v21 jar。它于 2013 年发布,在 .download 显然被添加为 TLD 之前。

查看堆栈跟踪,它表明异常是从 Preconditions.java 的第 176 行抛出的,但在 v21 中该行只是一个 */。倒退直到v17行号有意义。

同样的问题与 InternetDomainName - 比较 v21v14 (先决条件 也在 v14 中排列)。

所以仔细看看你的类路径,我认为这是你的问题。


编辑:确认这在 v21 中与 Scala 一起工作:

$ scala -cp guava-21.0.jar
Welcome to Scala 2.11.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions for evaluation. Or try :help.

scala> import com.google.common.net._
import com.google.common.net._

scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
res0: com.google.common.net.InternetDomainName = spaceforupdate.download

关于java - InternetDomainName 和 publicsuffix 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45046265/

相关文章:

java - 如何更改记录的时间戳?

java - "SQLServerException: String or binary data would be truncated"问题 - 配置 H2 DB 进行诊断,但列大小更改未生效?

java - 如何使用itext删除PDF附件

java - 将 Elasticsearch 的 DeleteByQueryPlugin 从 2.4 迁移到 5.2.2

java - "Could not find main class error"在 Windows 上,而不是在 Linux 上

java - Webjars 定位器不适用于基于 XML 的 Spring MVC 4.2.x 配置?

java - Ant + Tomcat 部署 "failed to create task or type deploy"

java - 如何在子类型上使用为通用父类(super class)型声明的 Guava 函数?

java - 如何将字符串拆分为固定长度的 block ,但不在单词之间?

java - 在实体集合中查找所有 id 集合的最有效方法