Wie überprüfe ich, ob eine JAR-Datei gültig ist?

Mit meiner Web-App kann ein Benutzer eine JAR-Datei hochladen. Nachdem die JAR-Datei hochgeladen wurde, ist sie jedoch beschädigt. Ich habe dies durch Vergleichen der MD5-Prüfsumme (winmd5free) überprüft.

Die hochgeladene JAR-Datei sieht "normal" und "richtig" aus

die Dateigröße im Vergleich zum Original sieht richtig aus (auf KB-Ebene)Ich kann die hochgeladene JAR-Datei mit 7Z öffnen und deren Inhalt (Ressourcen und Klassendateien) anzeigen. Im Vergleich zum Original ist alles gleich

Als ich die hochgeladene JAR-Datei öffne (mit Notepad ++), habe ich festgestellt, dass der binäre Inhalt vom Original abweicht. Als ich JarInputStream zum Lesen der Jar-Einträge verwendete, gab es auch keine Einträge.

JarInputStream is = new JarInputStream(new FileInputStream(new File("uploaded.jar")));
JarEntry entry = null;
while(null != (entry = is.getNextJarEntry())) {
 System.out.println(entry.getName());
}

Außerdem erhalte ich die folgende Meldung, wenn ich auf das Glas doppelklicke (Windows).

Fehler: Ungültiges oder beschädigtes Jarfile

meine fragen sind

Gibt es eine Möglichkeit, programmgesteuert zu überprüfen, ob eine JAR-Datei gültig ist? Ich hätte erwartet, dass JarInputStream dies sofort erkennt, aber es zeigt überhaupt keine ProblemeWenn ich in Windows auf die JAR-Datei doppelklicke, ist es java.exe, das mir die ungültige oder beschädigte JAR-Datei-Nachricht gibt?Wie kommt es, dass bei der Übergabe einer ungültigen JAR-Datei als Teil des Klassenpfads kein Fehler bzw. keine Ausnahme ausgelöst wird? z.B.java -cp uploaded.jar; libs * com.some.class.Test ?

Bitte beachten Sie, dass dies nichts mit dem Signieren von Gläsern und / oder dem Überprüfen des Signierens von Gläsern zu tun hat. Es wird lediglich geprüft, ob eine Datei (hochgeladen oder nicht) eine gültige JAR-Datei ist (nicht unbedingt, ob die Klassendateien der JAR gültig sind, da es bereits einen anderen SO-Beitrag zu diesem Thema gibt).

Ergebnisse zum Laufen

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)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage