Подтвердить что ты не робот

Обновление Java 7 25 заставляет наше приложение веб-запуска Java не работать без регистрации

Так как обновление java 7 25, запущенное Oracle, наше приложение больше не функционирует.

Изначально мы получили предупреждение о тегах кодовой базы и sercurity, отсутствующих в файле манифеста, которые мы исправили.

Теперь проблема заключается в том, что в консоли мы получаем только следующие строки:

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

Мы также получаем диалоговое окно "Ошибка приложения" с сообщением: Невозможно запустить приложение.

Кнопка "Сведения" содержит следующие данные в Exception:

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)

Соответствующие части кода:

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

(Последняя строка - номер строки 139)

desktop.DesktopProxySelector:

public class DesktopProxySelector extends ProxySelector {

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

(Последняя строка - это строка 24, где происходит исключение)

Может кто-нибудь дать нам подсказки подсказки (или лучше решение) для этого нового поведения java, вызванного этим "незначительным" обновлением.

Когда мы запускаем приложение прямо из cli, используя java -jar Desktop.jar, приложение wil запускает файл, поэтому в проблеме явно есть что-то делать с изменениями в запуске java-сети.

@trashgod: ошибка явно имеет отношение к изменению разрешений в 7u25, поскольку NullPointerException происходит в com.sun.jnlp.JNLPClassLoader.getPermissions.

Просто, чтобы объяснить, что я думаю (я - коллега Wouter): desktop.Main создает экземпляр desktop.DesktopProxySelector(наш класс), desktop.DesktopProxySelector создает экземпляр desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService создает экземпляр java.net.URI.

В первой строке запуска DesktopProxySelector, где создается экземпляр CentralConfigurationService, метод getPermissions, вызываемый JNLPClassLoader, выдает исключение NullPointerException. Так что что-то происходит неправильно при загрузке класса CentralConfigurationService с помощью java webstart с получением разрешений для класса. Может ли это иметь какое-либо отношение к тому, что создается экземпляр класса URI, который требует дополнительных разрешений (соединение с удаленным uri настроено)?

4b9b3361

Ответ 1

В конце концов проблема была решена. Проблема была вызвана несоответствием в включенных файлах jar в основном файле MANIFEST.MF и файлах jar, указанных в файле launch.jnlp.

Теперь необходимо, чтобы все файлы jar, которые будут использоваться, также присутствовали в файле launch.jnlp.

(Раньше было принято решение сохранить этот файл вручную в раковине, который, очевидно, не всегда поддерживался в режиме propper. Теперь этот процесс автоматизирован, поэтому проблема больше не будет с нами.)