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

时间:2012-09-14 09:41:49

标签: java https jnlp java-web-start

非常感谢所有需要时间阅读的人。

我正在努力使用java webstart 1.6.0_29创建一个Webstart Swing 1.4.2_12应用程序。

以下是该方案:

  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”文件
  6. 报告以下消息:

    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时会发生同样的错误。

    以下HTTP标头都由JNLP servlet发送到客户端:

    缓存控制:清空
    Pragma:空

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

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

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

    感谢阅读。

1 个答案:

答案 0 :(得分:1)

@Andrew:感谢您的关注。

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

简而言之:始终在jnlp标记中设置href属性!

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

多个HTTP调试会话显示:

场景1: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或类似的)
  7.   

    请注意:在此方案中使用JWS 1.4或1.5时,   应用将开始。该问题仅在使用JWS 1.6时出现   运行1.4.2_12应用程序。没有时,JWS 1.5和1.6不会失败   href属性已设置。相反,他们只是按原样使用JNLP,检查   JAR更新然后启动应用程序。

    场景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正确启动应用程序。
    9. 这对我来说是一个巨大的痛苦,并花了我几天时间来解决这个问题。希望有一天能帮助别人。