Java 7 Update 25 führt dazu, dass unsere Java-Webstartanwendung ohne Protokollierung fehlschlägt

Seit dem von Oracle gestarteten Java 7 Update 25 funktioniert unsere Anwendung nicht mehr.

Zu Beginn wurde eine Warnung bezüglich fehlender Codebasis- und Sercurity-Tags in der Manifest-Datei angezeigt, die behoben wurde.

Das Problem, mit dem wir jetzt enden, ist, dass wir in der Konsole nur die folgenden Zeilen erhalten:

#### Java Web Start Error:
#### null

Wir erhalten auch einen Anwendungsfehlerdialog mit der Meldung:Die Anwendung kann nicht geöffnet werden.

Die Schaltfläche Details enthält die folgenden Details in der Ausnahme:

java.lang.NullPointerException
    at com.sun.jnlp.JNLPClassLoader.getPermissions(Unknown Source)
    at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at desktop.DesktopProxySelector.<init>(DesktopProxySelector.java:24)     <- code smippet below
    at desktop.Main.main(Main.java:139)                                      <- code smippet below
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    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(Thread.java:724)

Die relevanten Codeteile sind:

Desktop.Main.main

/**
 * Main method, starts the application
 */
public static void main(String[] args) {
    System.setProperty("java.net.useSystemProxies", "true");

    //Logger.getLogger("httpclient.wire.header.level").setLevel(Level.FINEST);
    //Logger.getLogger("org.apache.commons.httpclient.level").setLevel(Level.FINEST);
    java.net.ProxySelector.setDefault(new DesktopProxySelector(java.net.ProxySelector.getDefault()));

(Die letzte Zeile ist Zeilennummer 139)

desktop.DesktopProxySelector:

public class DesktopProxySelector extends ProxySelector {

    public  DesktopProxySelector(ProxySelector defaultSelector) {
    URI httpsUri = new CentralConfigurationService().getCentralLocation();

(Die letzte Zeile ist die Zeile Nummer 24, in der die Ausnahme auftritt.)

Kann uns jemand Hinweise (oder besser eine Lösung) für dieses neue Verhalten von Java geben, das durch dieses 'kleinere' Update verursacht wurde?

Wenn wir die Anwendung direkt von der CLI aus mit Java -jar Desktop.jar ausführen, wird die Anwendung die Datei ausführen, sodass das Problem eindeutig etwas mit den Änderungen in Java Web Start zu tun hat.

@ trashgod: Der Fehler hat eindeutig etwas mit der Berechtigungsänderung in 7u25 zu tun, da die NullPointerException in com.sun.jnlp.JNLPClassLoader.getPermissions auftritt.

Um nur zu erklären, was meiner Meinung nach passiert (ich bin ein Kollege von Wouter): desktop.Main instanziiert einen Desktop.DesktopProxySelector (unsere Klasse), desktop.DesktopProxySelector instanziiert desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService instanziiert einen java.net.URI .

In der ersten Zeile des DesktopProxySelector-Init, in der der CentralConfigurationService instanziiert wird, löst die vom JNLPClassLoader aufgerufene getPermissions-Methode die NullPointerException aus. Beim Laden der CentralConfigurationService-Klasse von Java Webstart mit dem Abrufen der Berechtigungen für die Klasse ist also ein Fehler aufgetreten. Kann das etwas damit zu tun haben, dass eine URI-Klasse instanziiert wird, für die zusätzliche Berechtigungen erforderlich sind (eine Verbindung zu einer Remote-URL ist eingerichtet)?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage