Java 7 update 25 sprawia, że ​​nasza aplikacja Java Web Start nie działa bez logowania

Od czasu uruchomienia java 7 update 25 przez Oracle nasza aplikacja nie działa.

Początkowo otrzymaliśmy ostrzeżenie o brakach znaczników kodu i zabezpieczeń w pliku manifestu, które naprawiliśmy.

Problem, z którym obecnie się spotykamy, polega na tym, że w konsoli otrzymujemy tylko następujące linie:

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

Dostajemy również okno dialogowe Błąd aplikacji z komunikatem:Nie można uruchomić aplikacji.

Przycisk szczegółów podaje następujące szczegóły w Wyjątku:

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)

Odpowiednie części kodu to:

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()));

(Ostatnia linia to numer linii 139)

desktop.DesktopProxySelector:

public class DesktopProxySelector extends ProxySelector {

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

(Ostatnia linia to linia 24, w której występuje wyjątek)

Czy ktoś może nam przekazać wskazówki (lub lepsze rozwiązanie) dla tego nowego zachowania Java spowodowanego tą „drobną” aktualizacją.

Kiedy uruchomimy aplikację bezpośrednio z cli, używając java -jar Desktop.jar, aplikacja uruchomi plik, więc problem ma wyraźnie coś ze zmianami w uruchomieniu java.

@trashgod: błąd wyraźnie ma coś wspólnego ze zmianą uprawnień w 7u25, ponieważ wyjątek NullPointerException występuje w com.sun.jnlp.JNLPClassLoader.getPermissions.

Aby wyjaśnić, co się dzieje (jestem kolegą z Wouter): desktop.Main tworzy instancję desktop.DesktopProxySelector (nasza klasa), desktop.DesktopProxySelector tworzy instancję desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService tworzy instancje a java.net.URI .

W pierwszym wierszu init DesktopProxySelector, w którym tworzona jest instancja CentralConfigurationService, metoda getPermissions, wywoływana przez JNLPClassLoader, zgłasza wyjątek NullPointerException. Więc coś idzie nie tak podczas ładowania klasy CentralConfigurationService przez webstart java z uzyskaniem uprawnień dla klasy. Czy może to mieć coś wspólnego z faktem, że tworzona jest instancja klasy URI, która wymaga dodatkowych uprawnień (połączenie ze zdalnym uri jest skonfigurowane)?

questionAnswers(1)

yourAnswerToTheQuestion