我直接发布了我自己的答案,因为经过数周想知道为什么会发生这种情况后,我们终于弄清楚了引发这种行为的一件事。请随时发布您自己的答案以添加到讨论中。
根本原因
从 Java SE 7 Update 21 开始,Web Start 启动器在启动 JNLP 时将在其主机名中使用大写和小写字母来处理不同的远程服务器。
因此,使用以下替代拼写启动 JNLP 将触发不同的行为:
注意: 1.7.0_21 的发行说明没有解释这背后的原因。
解决方案
在链接将通过 Web Start 通过 JNLP 协议加载的资源时,不要使用大写字符。
如果您的系统使用大写主机名(出于任何原因,这可能不是一个有效的主机名 - 请参阅下面的下一节),那么在调用 Web Start 启动器或构建它将用于启动的 URL 之前将它们转换为小写。
主机名不区分大小写
需要注意的是,RFC952因此假设主机名(强调我的):
“名称”(网络、主机、网关或域名)是由字母 (AZ)、数字 (0-9)、减号 (-) 和句点 (.) 组成的最多 24 个字符的文本字符串。 请注意,仅当它们用于分隔“域名样式名称”的组成部分时才允许使用句点。(有关背景信息,请参阅 RFC-921,“域名系统实施时间表”)。不允许将空格或空格字符作为名称的一部分。不区分大小写。 第一个字符必须是字母字符。最后一个字符不能是减号或句点。用作网关的主机应将“-GATEWAY”或“-GW”作为其名称的一部分。不作为 Internet 网关的主机不应使用“-GATEWAY”和“-GW”作为其名称的一部分。如果主机是 DoD 主机,则作为 TAC 的主机应将“-TAC”作为其主机名的最后一部分。不允许使用单个字符的名称或昵称。
如果您的系统出于某种原因需要大写字符,则说明它做错了;不幸的是,从 1.7.0_21 开始,Web Start 也是如此。
请注意,我目前还没有看到并且不知道 Oracle 数据库中的错误报告,并且此问题的信号在网上似乎相当低,因此其他情况可能会触发此行为。我还没有制定出一个简单的测试用例。