Java 7, обновление 25, приводит к сбою нашего веб-приложения java без регистрации
Начиная с обновления 25 Java, запущенного Oracle, наше приложение больше не работает.
Изначально мы получили предупреждение о том, что в файле манифеста отсутствуют теги codebase и sercurity, которые мы исправили.
Проблема, с которой мы сейчас сталкиваемся, заключается в том, что в консоли мы получаем только следующие строки:
#### Java Web Start Error:
#### null
Мы также получаем диалог Ошибка приложения с сообщением:Не удалось запустить приложение.
Кнопка «Подробности» содержит следующие сведения в исключении:
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, приложение запустит файл, поэтому проблема явно связана с изменениями в java web start.
@trashgod: ошибка явно связана с изменением разрешений в 7u25, поскольку исключение NullPointerException происходит в com.sun.jnlp.JNLPClassLoader.getPermissions.
Просто чтобы объяснить, что, по моему мнению, происходит (я - коллега из Wouter): desktop.Main создает экземпляр desktop.DesktopProxySelector (наш класс), desktop.DesktopProxySelector создает desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService создает экземпляр java.net.UR ,
В первой строке инициализации DesktopProxySelector, где создается экземпляр CentralConfigurationService, метод getPermissions, вызываемый JNLPClassLoader, генерирует исключение NullPointerException. Так что что-то идет не так при загрузке класса CentralConfigurationService с помощью Java WebStart с получением разрешений для класса. Может ли это быть как-то связано с тем фактом, что создается экземпляр класса URI, что требует дополнительных разрешений (устанавливается соединение с удаленным URI)?