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 originalQuando 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)