java - FileNotFoundException 通过 HTTPS 使用 java webstart 1.6 启动 1.4.2 webstart 应用程序

标签 java https jnlp java-web-start

非常感谢所有愿意花时间阅读的人。

我正在努力制作一个 webstart Swing 1.4.2_12 应用程序以使用 java webstart 1.6.0_29 启动。

场景如下:

  1. 所有流量都通过 HTTPS 完成
  2. 用户点击网页上的链接以启动应用程序:servlet 生成jnlp文件
  3. Java webstart 客户端 (1.6.0_29) 启动并加载应用程序 呼吸
  4. 因为jnlp描述符java中j2se版本设置为1.4.2_12 webstart 1.4.2_12 用于启动应用程序(由 1.6.0_29)
  5. Java webstart 1.4.2_12 启动失败,声称它找不到一些幽灵“javaws2”文件

报告以下消息:

CouldNotLoadArgumentException[ Could not load specified file/URL : C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2]
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

完整的堆栈跟踪是:

java.io.FileNotFoundException: C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2 (File not found)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
  • 禁用 HTTPS 时会发生同样的错误。

JNLP servlet 将以下两个 HTTP header 发送到客户端:

缓存控制:空
编译指示:空

这些 header 是防止 IE 在 HTTPS 模式下禁用缓存所必需的,这会阻止 java webstart 找到加载的 jnlp 文件(因为它没有被缓存)。

  • Mime 类型设置为:application/x-java-jnlp-file

  • 我不明白的是为什么java 1.4.2_12找不到JWS 1.6.0_29加载的jnlp文件?

感谢阅读。

最佳答案

@Andrew:感谢您的关注。

这是我对这个问题的结论。

简而言之:总是在 jnlp 标签中设置 href 属性!

<jnlp spec="1.0+" codebase="htt://myhost/codebase" href="mustSetThisAbsolutelyForJWS-1.4.2_12.jnlp">
...
</jnlp>

多个 HTTP 调试 session 表明:

场景一:href属性留空,JNLP文件关联客户端JWS 1.6

  1. 用户点击 jnlp 链接,JNLP 文件被下载并缓存 浏览器。
  2. JWS 1.6.0_29 启动,然后读取下载的 JNLP 文件。
  3. JWS 1.6.0_29 下载所有 JAR 文件,然后切换到 JWS 1.4.2_12。
  4. JWS 1.4.2_12 启动,然后显然依次读取 JNLP 文件。
  5. JWS 1.4.2_12 尝试检索 href 指向的 JNLP 文件 属性。
  6. 由于 href 为空,JWS 报告“无法加载指定的文件/URL : C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2"。(作为旁注,ghost javaws2 有时被命名为 javaws10 或类似名称)

Please note : When using JWS 1.4 or 1.5 with this scenario, the application WILL start. The issue only appears when JWS 1.6 is used to run a 1.4.2_12 application. JWS 1.5 and 1.6 do not fail when no href attribute is set. Instead they simply use the JNLP as is, check the JAR updates and then launch the application.

场景 2:为 href 属性设置了适当的值并且 JNLP 文件与客户端上的 JWS 1.6 相关联

  1. 用户点击 jnlp 链接,JNLP 文件被下载并缓存 浏览器。
  2. JWS 1.6.0_29 启动,然后读取下载的 JNLP 文件。
  3. JWS 1.6.0_29 下载所有 JAR 文件,然后切换到 JWS 1.4.2_12。
  4. JWS 1.4.2_12 启动,然后显然依次读取 JNLP 文件。
  5. JWS 1.4.2_12 尝试检索 href 指向的 JNLP 文件 属性。
  6. JWS 1.4.2_12 下载 href 属性指向的 JNLP。
  7. JWS 1.4.2_12 下载新下载的 JNLP 文件中引用的所有 JNLP JAR 文件
  8. JWS 1.4.2_12 正确启动应用程序。

这对我来说是一个巨大的痛苦,我花了几天时间才弄明白。希望有一天这会对某人有所帮助。

关于java - FileNotFoundException 通过 HTTPS 使用 java webstart 1.6 启动 1.4.2 webstart 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421950/

相关文章:

java - 使用 GSON 到 JSON > POJO

java - LWJGL教程

java - 直接将XML记录显示到jtable记录

c - 为什么我无法嗅探 HTTPS 流量?

java - 使用旧小程序中的deployjava.js 添加参数

Python 等同于 Java 的 JNLP Web Start?

java - JTable 在鼠标单击时更改单元格背景 - 发布后更改背景?

ssl - PhpMyAdmin 滑动 &lt;style&gt;html{display :none;}&lt;/style&gt; into <head> tag after adding https and cloudflare?

spring - 如何使用 Tomcat + Spring Security 对静态内容强制执行 HTTPS

jenkins - 将安全上下文传递给 Jenkins-Kubernetes 插件