Java版本7u45(NPE)后Java Web启动不起作用

时间:2013-10-28 12:31:33

标签: java glassfish java-web-start

我们的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);

修改 发生NPE的上述两个代码行是Glassfish代码,来自jar JWSAppClientContainerMain中的类gf-client-module.jar。它一直工作到java更新45。

4 个答案:

答案 0 :(得分:1)

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

您需要将loader.config更改为jnlp.loader.config(在JNLP中以及您的Java代码中),或者您需要签署JNLP(将JNLP的精确副本放入 罐子里面有JNLP-INF/APPLICATION.JNLP并在罐子上签名。

根据this OpenJDK Bugreport,这是解决安全问题的有意改变 漏洞

答案 1 :(得分:0)

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

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

希望这有帮助

答案 2 :(得分:0)

我们搜索了很多关于这个问题的内容,幸运的是我们找到了一个适合我们的解决方案。

在我们的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

希望这可以帮助你。

答案 3 :(得分:0)

此问题已在glassfish 4.1中解决,直到您将Java降级为u21或更早版本。