como verificar se um arquivo jar é válido?

meu webapp permite que um usuário carregue um arquivo jar. no entanto, depois que o arquivo jar é carregado, ele está corrompido. Eu verifiquei isso comparando a soma de verificação md5 (winmd5free).

o arquivo jar carregado parece "normal" e "certo"

o tamanho do arquivo comparado ao original parece correto (no nível KB)Eu posso abrir o arquivo jar carregado usando 7z e ver o seu conteúdo (recursos e arquivos de classe), e tudo é o mesmo em comparação com o original

Quando eu abro o arquivo jar carregado (usando o Notepad + +), notei que o conteúdo binário é diferente do original. Além disso, quando eu usei JarInputStream para ler as entradas do jar, não havia entradas.

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

Além disso, quando clico duas vezes no jar (Windows), recebo a seguinte mensagem.

Erro jarfile inválido ou corrompido

minhas perguntas são

Existe uma maneira de verificar programaticamente se um arquivo jar é válido? Eu teria esperado que o JarInputStream detectasse isso imediatamente, mas ele não mostra nenhum problemaquando clico duas vezes no arquivo jar, no windows, é java.exe que está me dando a mensagem jarfile inválida ou corrompida?por que quando um arquivo jar inválido é passado como parte do caminho de classe, nenhum erro / exceção é lançado? por exemplo.java -cp uploaded.jar; libs * com.some.class.Test ?

Por favor, note que isso não tem nada a ver com a assinatura do jar e / ou a verificação da assinatura de um jar. é simplesmente verificar se um arquivo (carregado ou não) é um arquivo jar válido (não necessariamente se os arquivos de classe do jar são válidos, já que há outra postagem sobre esse problema).

resultados para correr

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