La mise à jour Java 7 25 fait échouer notre application java Web start sans journalisation
Depuis la mise à jour java 7 25 lancée par Oracle, notre application ne fonctionne plus.
Initialement, nous avons reçu un avertissement sur les balises codebase & sercurity manquantes dans le fichier Manifeste, que nous avons corrigé.
Le problème avec lequel nous nous retrouvons maintenant est que dans la console, nous n'obtenons que les lignes suivantes:
#### Java Web Start Error:
#### null
Nous obtenons aussi une application de dialogue d'Erreur avec le message: Impossible de lancer l'application.
Le bouton details donne les détails suivants dans le 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)
Les parties de code pertinentes sont:
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()));
(La dernière ligne est le numéro de ligne 139)
desktop.DesktopProxySelector:
public class DesktopProxySelector extends ProxySelector {
public DesktopProxySelector(ProxySelector defaultSelector) {
URI httpsUri = new CentralConfigurationService().getCentralLocation();
(La dernière ligne est la ligne numéro 24 où l'exception se produit)
Quelqu'un peut-il nous donner des indices (ou mieux une solution) pour ce nouveau comportement de java causé par cette mise à jour "mineure".
Lorsque nous exécutons l'application directement à partir de la cli en utilisant java-jar Desktop.jar l'application exécutera le fichier, donc le problème a clairement quelque chose à faire avec le changements dans java web start.
@trashgod: l'erreur a clairement quelque chose à voir avec le changement d'autorisations dans 7u25, puisque l'exception NullPointerException se produit dans com.soleil.jnlp.JNLPClassLoader.getPermissions.
Juste pour expliquer ce que je pense se passer (je suis un collègue de Wouter): Desktop.Principal instancie un bureau.DesktopProxySelector (notre classe), Desktop.DesktopProxySelector instancie Desktop.configuration.CentralConfigurationService Desktop.configuration.CentralConfigurationService instancie un java. net. URI.
Sur la première ligne de l'initialisation DesktopProxySelector où CentralConfigurationService est instancié, la méthode getPermissions, appelée par JNLPClassLoader, lève l'exception NullPointerException. Donc, quelque chose ne va pas lors du chargement de la classe CentralConfigurationService par java webstart avec l'obtention des autorisations pour la classe. Elle pouvait quelque chose à voir avec le fait qu'une classe URI est instanciée, ce qui nécessite des autorisations supplémentaires (une connexion à un uri distant est configurée)?
1 answers
Finalement, le problème a été résolu. Le problème a été causé par une non-concordance dans les fichiers jar inclus dans le MANIFESTE principal.Fichier MF vs les fichiers jar mentionnés dans le lancement.jnlp.
Apparemment, il est maintenant nécessaire que tous les fichiers jar qui seront utilisés soient également présents dans le lancement.fichier jnlp.
(Dans le passé, il a été décidé de conserver ce fichier manuellement dans sink, ce qui n'était évidemment pas toujours maintenu de manière propper. Maintenant, ce processus est automatisé, donc le problème ne devrait plus nous arriver.)