Ciao a tutti è il mio primo problema (su questo forum) spero possiate aiutarmi e consigliarmi.
L'applicazione da me realizzata è depositata su un server e distribuita sui vari client mediante javawebstart.
Pertanto le varie classi e files sono compattati in dei file.jar; tali jar sono stati tutti firmati poichè ci sono delle classi che richiedono di accedere al file system locale e quindi il tag del file jnlp di avvio è stato impostato su .
Fin qui nessun problema.
Il dilemma sorge quando devo caricare da una classe una risorsa presente su un jar differente da cui essa appartiene.
b.jar!/ovi faccio vedere brevemente la struttura dei jar
app.jar!/GUIobjects/*.class
app.jar!/objects/*.class
app.jar!/reports/*.jasper
mylib.jar!/GUIobjects/*.class
mylib.jar!/objects/*.class
Poichè la classe che deve caricare la risorsa si trova in
mylib.jar!/objects/*.class
e la risorsa da caricare in
app.jar!/reports/*.jasper
non posso utilizzare InputStream is = getClass().getResourceAsStream(reports/f.jasper)
bensì
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(reports/f.jasper)
Se compilo ed eseguito da netbeans funziona. se invece faccio partire l'applicazione da javawebstart, mi diche che l'oggetto input stream è nullo ho infatti scorporato l'istruzione sopra per cercare di capire il problema
--
ClassLoader loader = ClassLoader.getSystemClassLoader();
if (loader== null){
System.out.println("no classloader");
}
else{
InputStream is = loader.getResourceAsStream(filepath);
if(is==null)
System.out.println("no inputstream");
Vorrei capire per quale motivo, l'unica differenza che c'è tra far avviare l'applicazione da netbeans e farla avviare tramite webstart, è che nel primo caso non si applicano i criteri di policy e nel secondo sì.Io però non credo sia un problema di policy, per 2 motivi
1 - non mi da un errore perciso di accesso negato, tanto è vero che il classloader viene creato
2 - i jar sono tutti firmati e il tag , come accennato prima è impostato su
d'altro canto non può essere che il percorso della risorsa sia sbagliato altrimenti non riusciva a trovarla anche se avvio da netbeans.
Aggiungo per finire che se modifico la struttura dei jar e metto i file da caricare nello stesso jar della classe che li carica, posso utilizzare il metodo getClass().getResourceAsStream() e in questo caso funziona tutto
Voi cosa ne dite?
grazie per l'attenzione