2013-06-21 7 views
13

Poiché l'aggiornamento java 7 25 lanciato da Oracle, la nostra applicazione non funziona più.Java 7 update 25 fa fallire l'applicazione java web start senza registrazione

Inizialmente abbiamo ricevuto un avvertimento relativo alle code di codice & mancanti nel file Manifest, che abbiamo corretto.

Il problema che ora finisce con è che nella console abbiamo solo le seguenti linee:

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

Inoltre otteniamo una finestra di errore dell'applicazione con il messaggio: Impossibile avviare l'applicazione.

sul pulsante Dettagli fornisce i seguenti dettagli nella Eccezione:

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) 

Le parti di codice rilevanti sono:

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

(L'ultima riga è il numero di riga 139)

desktop.DesktopProxySelector: 

public class DesktopProxySelector extends ProxySelector { 

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

(L'ultima riga è la linea numero 24 dove si verifica l'eccezione)

Qualcuno può darci qualche suggerimento sugli indizi (o meglio una soluzione) per questo nuovo comportamento di java causato da questo aggiornamento "minore".

Quando eseguiamo l'applicazione direttamente dal cli utilizzando java -jar Desktop.jar l'applicazione esegue il file, quindi il problema ha chiaramente qualcosa da fare con le modifiche all'avvio di java web.

@trashgod: l'errore ha chiaramente a che fare con la modifica delle autorizzazioni in 7u25, poiché l'eccezione NullPointerException si verifica in com.sun.jnlp.JNLPClassLoader.getPermissions.

solo spiegare quello che penso succede (io sono un collega di Wouter): desktop.Main un'istanza di un desktop.DesktopProxySelector (la nostra classe), desktop.DesktopProxySelector un'istanza desktop.configuration.CentralConfigurationService desktop.configuration.CentralConfigurationService crea un'istanza di java.net.URI.

Sulla prima riga di init di DesktopProxySelector in cui è istanziato CentralConfigurationService, il metodo getPermissions, chiamato da JNLPClassLoader, genera NullPointerException. Quindi qualcosa sta andando storto durante il caricamento della classe CentralConfigurationService da parte di java webstart con l'ottenimento delle autorizzazioni per la classe. Potrebbe avere qualcosa a che fare con il fatto che viene istanziata una classe URI, che richiede permessi extra (una connessione a un uri remoto è impostata)?

+0

Uhm bene, JavaFX è ora incluso in u25 da quello che ho letto, ma non so se ciò potrebbe provocare _that_ – fge

+0

Finora, vedo solo l'aggiornamento esporre i miei errori. Vedi anche queste [Domande e risposte] correlate (http://stackoverflow.com/q/17210607/230513), [Domande e risposte] (http://stackoverflow.com/q/17204465/230513). – trashgod

+0

Il problema sembra essere correlato alle connessioni di rete in java webstart, con le modifiche al sistema delle autorizzazioni in java 7u25. Non appena commentiamo la riga 139 in main, la stessa identica eccezione si verifica sul desktop. Main $ 2.run (Main.java:148) che legge HttpClientFactory.initialize() ;. Quindi sembra davvero che ci sia un bug nel nuovo sistema di permessi in java 7u25 dove le connessioni di rete sono interessate in java webstart. –

risposta

6

Alla fine il problema è stato risolto. Il problema è stato causato da una mancata corrispondenza tra i file jar inclusi nel file MANIFEST.MF principale rispetto ai file jar menzionati in launch.jnlp.

Apperentemente ora è necessario che tutti i file jar che verranno utilizzati siano presenti nel file launch.jnlp.

(In passato si è deciso di mantenere questo file manualmente nel sink, che ovviamente non è stato sempre mantenuto in modalità propper. Ora questo processo è automatizzato, quindi il problema non dovrebbe più capitare a noi.)

+1

sembra una cattiva idea - richiede informazioni duplicate sia nel file .jar che nel file jnlp crea l'opportunità di errori senza aggiungere alcuna sicurezza (dal momento che controlli il contenuto di entrambi) – ddyer

+0

Questo è qualcosa che per me accade automaticamente da netbeans . Potrebbe essere correlato a come il progetto è stato impostato in passato. – Wouter

+0

@Wouter, utilizzo Netbeans anche per compilare la mia app .jnlp. Sto ottenendo anche questo errore. Come si aggiungono i file jar al file MANIFEST.MF? – ryvantage