Как проверить, является ли файл 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)