首页 文章

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

提问于
浏览
3

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

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

这是场景:

  • 所有流量都通过HTTPS完成

  • 用户在网页上打开链接以启动应用程序:servlet生成的jnlp文件

  • Java webstart客户端(1.6.0_29)启动并一口气加载应用程序

  • 因为在jnlp描述符中将j2se版本设置为1.4.2_12,所以java webstart 1.4.2_12用于启动应用程序(由1.6.0_29加载)

  • Java webstart 1.4.2_12 fails on startup claiming that it cannot find some ghost "javaws2" file

报告以下消息:

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发送到客户端:

Cache-Control : empty
Pragma : empty

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

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

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

谢谢阅读 .

1 回答

  • 1

    @Andrew:谢谢你的兴趣 .

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

    简而言之: Always set the href attribute in the the jnlp tag !

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

    多个HTTP调试会话表明:

    场景1:href属性为空,JNLP文件与客户端上的JWS 1.6关联

    • 用户单击jnlp链接,浏览器下载并缓存JNLP文件 .

    • JWS 1.6.0_29启动然后读取下载的JNLP文件 .

    • JWS 1.6.0_29下载所有JAR文件,然后切换到JWS 1.4.2_12 .

    • JWS 1.4.2_12启动,然后显然读取了JNLP文件 .

    • JWS 1.4.2_12尝试检索href属性指向的JNLP文件 .

    • Since href is empty, JWS reports "Could not load specified file/URL : C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2". (As a side note, ghost javaws2 is sometimes named javaws10 or similar)

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

    场景2:href属性设置为正确值,JNLP文件与客户端上的JWS 1.6关联

    • 用户单击jnlp链接,浏览器下载并缓存JNLP文件 .

    • JWS 1.6.0_29启动然后读取下载的JNLP文件 .

    • JWS 1.6.0_29下载所有JAR文件,然后切换到JWS 1.4.2_12 .

    • JWS 1.4.2_12启动,然后显然读取了JNLP文件 .

    • JWS 1.4.2_12尝试检索href属性指向的JNLP文件 .

    • JWS 1.4.2_12 downloads href属性指向的JNLP .
      新下载的JNLP文件中引用了

    • JWS 1.4.2_12 downloads all JNLP JAR files .

    • JWS 1.4.2_12正确启动应用程序 .

    这对我来说是一个巨大的痛苦,并花了我几天时间来解决这个问题 . 希望有一天能帮助别人 .

相关问题