Как проверить, является ли файл JAR действительным?

мое веб-приложение позволяет пользователю загружать файл JAR. однако после загрузки файла JAR он поврежден. я проверил это, сравнив контрольную сумму md5 (winmd5free).

загруженный файл JAR выглядит "нормальный" а также "право"

размер файла по сравнению с оригинальным выглядит правильно (на уровне КБ)я могу открыть загруженный файл JAR с помощью 7z и просмотреть его содержимое (ресурсы и файлы классов), и все то же самое по сравнению с оригиналом

Когда я открывал загруженный файл JAR (используя Notepad ++), я заметил, что двоичное содержимое отличается от оригинала. Кроме того, когда я использовал JarInputStream для чтения записей JAR, не было никаких записей.

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

Более того, когда я дважды щелкаю по банке (Windows), я получаю следующее сообщение.

Ошибка: неверный или поврежденный файл jarfile

мои вопросы

Есть ли способ программно проверить, является ли файл JAR действительным? я ожидал бы, что JarInputStream обнаружит это сразу, но это не показывает никаких проблем вообщекогда я дважды щелкаю по файлу jar, в windows, это java.exe, который дает мне недействительное или поврежденное сообщение jarfile?почему, когда недопустимый файл JAR передается как часть пути к классу, не выдается ошибка / исключение? напримерjava -cp uploaded.jar; libs * com.some.class.Test?

обратите внимание, что это не имеет ничего общего с подписью банки и / или проверкой подписания банки. это просто проверка, является ли файл (загруженный или нет) действительным файлом JAR (не обязательно, если файл 'Файлы классов s действительны, так как по этому вопросу уже есть еще один пост SO).

результаты для бега

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.(ZipFile.java:127)
        at java.util.zip.ZipFile.(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)

Ответы на вопрос(1)

Ваш ответ на вопрос