繁体   English   中英

Java版本7u45(NPE)之后无法使用Java Web Start

[英]Java web start doesn't work after java version 7u45 (NPE)

我们的Java应用程序是通过Java Web Start(带有glassfish 4.0)启动的。 更新到Java 7u45后,它不再起作用。 这是错误消息:

java.lang.NullPointerException
at java.io.StringReader.<init>(Unknown Source)
at org.glassfish.appclient.client.JWSAppClientContainerMain.insertMaskingLoader(JWSAppClientContainerMain.java:186)
at org.glassfish.appclient.client.JWSAppClientContainerMain.main(JWSAppClientContainerMain.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

下载完成后立即发生这种情况。 快速浏览GF源文件后,似乎未定义属性loader.config因为第二行引发了NPE:

final String loaderConfig = System.getProperty("loader.config");
StringReader sr = new StringReader(loaderConfig);

EDIT上述其中NPE发生两个代码行是Glassfish的代码,从类JWSAppClientContainerMain在罐子gf-client-module.jar 它一直工作到Java更新45。

从Update 45开始,JavaWebstart将不再将不安全的属性传递给您的应用程序。 没有以jnlpjavaws为前缀的所有属性均被视为不安全。

您或者需要将loader.config更改为jnlp.loader.config (在JNLP和Java代码中),或者需要对JNLP进行签名(将JNLP的确切副本放置在JNLP-INF/APPLICATION.JNLP在罐子里并在罐子上签名)。

根据此OpenJDK Bugreport,这是有意更改,以解决安全漏洞

您的系统属性中没有键为“ loader.config”的属性。这就是为什么它向loaderConfig返回空值的原因。 当您将null值传递给StringReader构造函数时,由于将在输入的Constructor参数( null值)上调用length方法,因此它将抛出NPE。 请看下面

public StringReader(String s) {
        this.str = s;
        this.length = s.length();
    }

希望这可以帮助

我们对此问题进行了很多搜索,幸运的是,我们找到了一个非常适合我们的解决方案。

在我们的jnlp文件中,我们有:

<resources>
        <j2se version="1.5+"/>
        ...
</resources>

我们已在此模式下进行了更改:

<resources>
        <j2se version="1.6+" java-vm-args="-Djava.net.preferIPv4Stack=true"/>
        ...
</resources>

我们在这里找到了这个解决方案:

https://community.oracle.com/thread/2520987

希望这对您有帮助。

glassfish 4.1中解决了此问题,然后将Java降级到u21或更早的版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM