la mia webapp consente a un utente di caricare un file jar. tuttavia, dopo il caricamento del file jar, è danneggiato. ho verificato questo confrontando il checksum md5 (winmd5free).come verificare se un file jar è valido?
il file jar caricato sembra "normale" e "destra"
- la dimensione del file rispetto all'originale guarda a destra (a livello KB)
- posso aprire il file jar caricato utilizzando 7z e visualizzarne il contenuto (risorse e file di classe), e tutto ciò che è lo stesso rispetto a quello originale
quando apro il file jar caricato (con Notepad ++), ho notato che il contenuto binario sono diversi da quello originale . inoltre, quando ho usato JarInputStream per leggere le voci jar, non c'erano voci.
JarInputStream is = new JarInputStream(new FileInputStream(new File("uploaded.jar")));
JarEntry entry = null;
while(null != (entry = is.getNextJarEntry())) {
System.out.println(entry.getName());
}
Inoltre, quando faccio doppio clic sul contenitore (Windows), viene visualizzato il seguente messaggio.
Error: Invalid or corrupt jarfile
le mie domande sono
- c'è un modo per controllare a livello di codice se un file jar è valida? mi sarei aspettato JarInputStream per rilevare questo subito, ma non mostra alcun problema
- quando faccio doppio clic sul file jar, in windows, è java.exe che mi sta dando il messaggio jarfile non valido o corrotto?
- Come mai quando un file jar non valido viene passato come parte del classpath, non viene generato nessun errore/eccezione? per esempio. java -cp uploaded.jar; libs * com.some.class.Test?
Si prega di notare che questo non ha nulla a che fare con la firma di barattoli e/o il controllo della firma di un barattolo. si tratta semplicemente di verificare se un file (caricato o meno) è un file jar valido (non necessariamente se i file di classe del jar sono validi, poiché esiste già un altro post SO su questo problema).
risultati per l'esecuzione
jar -tvf uploaded.jar
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.zip.ZipFile.<init>(ZipFile.java:88)
at sun.tools.jar.Main.list(Main.java:977)
at sun.tools.jar.Main.run(Main.java:222)
at sun.tools.jar.Main.main(Main.java:1147)
Sulla riga di comando, eseguire il comando jar in questo modo: 'jar -tvf'. La "t" dice "test", "v" credo "verbose" e "f" significa "file". Puoi anche aprire un JAR in qualsiasi programma ZIP. –
CodeChimp
grazie, userò java.util.zip.ZipFile per vedere se riesco a controllare a livello di programmazione (vedi l'aggiunta modificata della traccia dello stack dall'esecuzione di quelle opzioni con lo strumento jar). –
@CodeChimp 't'è per" Contenuto elenco di file JAR "come puoi vedere in https://docs.oracle.com/javase/tutorial/deployment/jar/view.html in modo da non testare i checksum dei contenuti (anche se deve essere un vaso più o meno valido per elencare le voci). – PhoneixS