我正在编写单元测试以比较Jar证书的签名。我一直在关注如何提供JarFile的文件路径:截至目前,它似乎正在返回某种哈希名称。

String[] jarClasses2 = dir2.list()
    for (int i = 0; i < jarClasses2.length; i++) {
    String jarName = jarClasses2[i]
    String filePath="pos/lib2/"+jarName
    JarFile jarFile1=new JarFile(filePath)
    JarFile jarFile = new JarFile(filePath)
    Certificate cert = entry.getCertificates()
    JarEntry entry=jarFile.entries()
    assertNotNull(cert)
}


我的文件路径正确,但是当我打印jarFile的名称时,它是:“ java.util.jar.JarFile@1e66f1f5”。尝试将jar文件转换为JarEntry时,我还会收到一个异常:


  * org.codehaus.groovy.runtime.type.handling.GroovyCastException:无法将类'java.util.jar.JarFile $ JarEntryIterator'的对象'java.util.jar.JarFile$JarEntryIterator@7530ad9c'转换为类'java.util.jar .JarEntry'


关于如何获取罐子位置并将其正确投射的任何建议?

最佳答案

您看到强制转换异常的原因是.entries()返回

Enumeration <JarEntry>


不只是一个JarEntry。所以,而不是

    JarEntry entry=jarFile.entries()


您将需要以下内容:

    Enumeration<JarEntry> entries=jarFile.entries()

    while(entries.hasMoreElements()) {
       JarEntry entry = entries.nextElement()
       Certificate[] certificates = entry.getCertificates()
       // process certificates in this jar entry
    }


(请参见JarFile#entries()JarEntry#getCertificates())。

07-24 21:29