JAVA 8u77上周发布(2016年3月23日)JAVA 8u77类加载器的bug - 寻找一个解决办法
嗨已经发布一个多月前一个相关的问题(关于JAVA 8u74) - 我现在发布的新问题,因为我们有更准确的信息,我的问题稍有不同。
随着我的Web Start应用程序,如果客户端安装更新,他将运行时出现错误:
java.security.cert.CertificateException:
Could not verify signing in resource: https://www.example.com:443/app/myFile.jar
at com.sun.deploy.security.TrustDecider.ensureAllJarEntriesSigned(Unknown Source)
….
潜水到代码中,我注意到了错误以下行制作:
ClassLoader classLoader = this.getClass().getClassLoader();
classLoader.getResource("").getPath();
第二行返回NULL。
此代码适用于JAVA 8u73及更早版本。 甲骨文证实了它是一个错误 - https://bugs.openjdk.java.net/browse/JDK-8152827
然而,我不知道我可以等待一个bug修复... 我们正在努力寻找一种解决方法......
这是我发现 -
我们试图用classloader访问的JAR文件不是应用程序类路径的一部分。 它们包含不属于JAVA代码的文件。
我们注意到,如果向JAR添加类文件,然后将JAR设置为项目和类路径的一部分,则错误不会重现。
但是我们的问题是我们有一个很长的动态JAR文件列表(我们定期创建新的JAR)。 每次应用程序加载时(使用JNLP文件) - 我们动态地将必要的JAR添加到JNLP文件列表中。 我们不可能为我们创建的每个新JAR进行应用程序的新部署。 (如上所述 - 这些JAR没有JAVA代码。)
当然,所有罐子都使用相同的可信证书进行签名。 而且 - 再次 - 在8u73上没有问题。
有没有人有解决办法的想法?
感谢
我原以为解决方法是使用没有此bug的版本。我猜你无法控制使用哪个版本? –
是 - 目前我要求客户不要安装更新。 – yos
我认为甲骨文不知道如何解决这个问题,因为他们理解错误的可能比任何人都好。 –