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)?

Author: Dolf Andringa, 2013-06-21

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.)

 6
Author: Wouter, 2013-06-24 20:47:32