jak sprawdzić, czy plik jar jest prawidłowy?

moja aplikacja internetowa pozwala użytkownikowi przesłać plik jar. jednak po przesłaniu pliku jar jest on uszkodzony. zweryfikowałem to, porównując sumę kontrolną md5 (winmd5free).

przesłany plik jar wygląda „normalnie” i „dobrze”

rozmiar pliku w porównaniu z oryginałem wygląda prawidłowo (na poziomie KB)mogę otworzyć przesłany plik jar używając 7z i wyświetlić jego zawartość (zasoby i pliki klas), a wszystko jest takie samo w porównaniu z oryginałem

kiedy otwieram przesłany plik jar (używając Notepad ++), zauważyłem, że zawartość binarna różni się od oryginału. również, gdy użyłem JarInputStream do odczytu wpisów jar, nie było żadnych wpisów.

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

ponadto, gdy dwukrotnie klikam na słoik (Windows), otrzymuję następujący komunikat.

Błąd: nieprawidłowy lub uszkodzony plik jarf

moje pytania są

czy istnieje sposób na programowe sprawdzenie, czy plik jar jest prawidłowy? Spodziewałbym się, że JarInputStream wykryje to od razu, ale nie wykazuje żadnych problemówkiedy dwukrotnie klikam plik jar, w systemie Windows jest to java.exe, który daje mi niepoprawną lub uszkodzoną wiadomość jarfile?w jaki sposób, gdy nieprawidłowy plik jar jest przekazywany jako część ścieżki klasy, nie jest zgłaszany błąd / wyjątek? na przykładjava -cp uploaded.jar; libs * com.some.class.Test ?

proszę zauważyć, że nie ma to nic wspólnego z podpisywaniem słoika i / lub sprawdzaniem podpisywania słoika. po prostu sprawdza, czy plik (przesłany lub nie) jest poprawnym plikiem jar (niekoniecznie, jeśli pliki klas jar są poprawne, ponieważ jest już inny post SO w tej kwestii).

wyniki do uruchomienia

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)

questionAnswers(1)

yourAnswerToTheQuestion