0

我们的 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 代码,来自JWSAppClientContainerMainjar 中的 Class gf-client-module.jar。它一直工作到java update 45。

4

4 回答 4

1

从 Update 45 开始,JavaWebstart 将不再将不安全的属性传递给您的应用程序。所有没有前缀jnlp或被javaws认为不安全的属性。

您需要更改loader.configjnlp.loader.config(在 JNLP 以及您的 java 代码中),或者您需要签署 JNLP(将您的 JNLP 的精确副本 JNLP-INF/APPLICATION.JNLP放在您的 jar 中并签署 jar)。

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

于 2013-10-28T13:26:28.333 回答
0

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

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

希望这可以帮助

于 2013-10-28T12:43:00.930 回答
0

这个问题在glassfish 4.1中得到解决,在此之前将你的 java 降级到 u21 或更早版本。

于 2014-03-07T15:54:47.463 回答
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

希望这可以帮助你。

于 2014-01-09T17:25:11.920 回答