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

FileNotFoundException通过HTTPS使用java webstart 1.6启动1.4.2 webstart应用程序,java,https,jnlp,java-web-start,Java,Https,Jnlp,Java Web Start,感谢所有愿意花时间阅读的人 我正在努力使webstart Swing 1.4.2_12应用程序与JavaWebStart 1.6.0_29一起启动 以下是场景: 所有通信都通过HTTPS完成 用户在网页上点击一个链接来启动应用程序:servlet 生成的jnlp文件 Java webstart客户端(1.6.029)在中启动并加载应用程序 一口气 因为j2se版本在jnlp描述符java中设置为1.4.2_12 webstart 1.4.2_12用于启动应用程序(由 1.6.0(29) Java

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

我正在努力使webstart Swing 1.4.2_12应用程序与JavaWebStart 1.6.0_29一起启动

以下是场景:

  • 所有通信都通过HTTPS完成
  • 用户在网页上点击一个链接来启动应用程序:servlet 生成的jnlp文件
  • Java webstart客户端(1.6.029)在中启动并加载应用程序 一口气
  • 因为j2se版本在jnlp描述符java中设置为1.4.2_12 webstart 1.4.2_12用于启动应用程序(由 1.6.0(29)
  • 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)
    
    java.io.FileNotFoundException:C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2(找不到文件)
    在java.io.FileInputStream.open(本机方法)
    位于java.io.FileInputStream。(未知源)
    位于java.io.FileInputStream。(未知源)
    位于com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(未知源)
    位于com.sun.javaws.Main.launchApp(未知源)
    位于com.sun.javaws.Main.continueInSecureThread(未知源)
    位于com.sun.javaws.Main$1.run(未知源)
    位于java.lang.Thread.run(未知源)
    
    • 禁用HTTPS时也会发生相同的错误
    JNLPServlet将以下两个HTTP头发送到客户端:

    缓存控制:空
    杂注:空

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

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

    • 我不明白的是,为什么Java1.4.2_12找不到JWS1.6.0_29加载的jnlp文件


    谢谢你的阅读。

    @安德鲁:谢谢你的关注

    下面是我对这个问题的结论

    简而言之:始终在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相关联
  • 用户单击jnlp链接,jnlp文件由 浏览器
  • JWS 1.6.0_29启动,然后读取下载的JNLP文件
  • JWS 1.6.0_29下载所有JAR文件,然后切换到JWS 1.4.2_12
  • JWS1.4.2_12启动,然后依次读取JNLP文件
  • JWS 1.4.2_12尝试检索href指向的JNLP文件 属性
  • 由于href为空,JWS reports“无法加载指定的文件/URL” :C:\DOCUME~1\BENOIT~1.VAT\LOCALS~1\Temp\javaws2”。(作为旁注,ghost javaws2有时被命名为javaws10或类似名称)
  • 请注意:在这个场景中使用JWS1.4或1.5时 应用程序将启动。该问题仅在使用JWS 1.6时出现 运行1.4.2_12应用程序。JWS 1.5和1.6在没有 href属性已设置。相反,他们只是按原样使用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
  • JWS1.4.2_12启动,然后依次读取JNLP文件
  • JWS 1.4.2_12尝试检索href指向的JNLP文件 属性
  • JWS 1.4.2_12下载href属性指向的JNLP
  • JWS 1.4.2_12下载新下载的JNLP文件中引用的所有JNLP JAR文件
  • JWS 1.4.2_12正确启动应用程序

  • 这对我来说是一件非常痛苦的事,我花了好几天才弄明白。希望有一天这会对某人有所帮助。

    为什么应用程序会这样做。是否使用过时JRE的过时版本?JNLP中如何指定JRE?您是否收到关于在旧JRE中运行代码的警告?不支持该应用程序。在较新的JRE中工作(达到测试极限)?3分之2还不错,但4分之0非常糟糕:(AndrewThompson感谢你的回复。应用程序使用过时的JRE,因为它是一个10年的遗留应用程序。它与1.5/1.6 JRE不兼容,有些功能被破坏了。更重要的是,不可能重新测试整个应用程序。所以我们不能考虑移动到1.5/1.6。因此,我们在JNLP描述符中声明***指令JWS切换到1.4。2_1 2.我目前正在对该问题进行深入分析,并最终将结果发布在此处。到目前为止,我怀疑根标记的空href属性是该问题的原因。