"Unable to load resource" 因为 "ZipException: invalid entry size"

"Unable to load resource" because of "ZipException: invalid entry size"

我有一个 Java 8 项目,它创建了大约十几个 JNLP 应用程序。我已在 Windows 上成功构建并 运行 它们。 JNLP 通过 javaws 正确启动。然后我 t运行 通过 FTP(二进制模式)将它作为 .tar 传递给 Solaris 机器,我的 SA 通过 Tomcat 部署。

当我访问 URL 以通过网络启动 JNLP 时,出现应用程序错误。

例外情况是:

com.sun.deploy.net.FailedDownloadException: Unable to load resource: https://example.com/webstartdev10g/dev/apps/libs/xerces.jar
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

包装异常是:

java.util.zip.ZipException: invalid entry size (expected 19075 but got 11917 bytes)
    at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:287)
    at java.util.zip.ZipOutputStream.finish(ZipOutputStream.java:360)
    at java.util.zip.DeflaterOutputStream.close(DeflaterOutputStream.java:238)
    at java.util.zip.ZipOutputStream.close(ZipOutputStream.java:377)
    at com.sun.deploy.net.HttpDownloadHelper.download(Unknown Source)
    at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source)
    at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我所有依赖 xerces 的 JNLP 应用程序都有同样的错误。不需要 xerces 的应用程序似乎运行良好。我检查了 xerces.jar 文件在我的 Windows 机器和 Solaris 机器上的大小是否相同。我直接访问了 https://example.com/webstartdev10g/dev/apps/libs/xerces.jar 并能够下载并打开文件。我什至用下载的版本替换了我的本地副本,并在本地 运行 应用程序,没有任何错误。基于此,该文件似乎实际上没有任何问题。

有什么想法可以帮助我缩小范围吗?

编辑:

我打开了 javaws -verbose 标志,以详细了解当我使用下载的 jar 在本地启动 JNLP 时发生的情况。事实证明,我 am 仍然收到错误,但这并没有阻止应用程序启动。它只是静默地记录在控制台中,列出了不同的大小。

java.util.zip.ZipException: invalid entry size (expected 19075 but got 16384 bytes)

我仍然不确定为什么只有这个文件有这个问题,或者为什么它报告自己在两台机器上的大小相同。

我重建、重新传输并重新部署了应用程序。他们现在似乎正在工作。我仍然对这些症状是如何出现的感到困惑,并且对任何关于发生的事情的理论感兴趣("the file was somehow corrupted during the transfer" 除外)。

无论如何,使用 javaws -verbose 帮助我获得了一些关于问题的线索,重新部署 tar 文件解决了问题。