iText / BouncyCastle抛出“java.lang.VerifyError:class overrides final method equals”

时间:2013-06-20 11:27:14

标签: pdf-generation itext bouncycastle

我们有一个应用程序可以创建未发布jasperreports的PDF 它还在创建后使用iText操作所述PDF。

我们最近开始在某些PDF上使用加密。这意味着在应用程序创建后可以处理PDF之前,必须对其进行解密。尝试使用iText的PdfReader(String path, byte[] password)时,我得到以下异常:

java.lang.VerifyError: class org.bouncycastle.asn1.ASN1Primitive overrides final method equals.(Ljava/lang/Object;)Z
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at com.simontuffs.onejar.JarClassLoader.defineClass(JarClassLoader.java:561)
    at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:475)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.itextpdf.text.pdf.PdfEncryption.<init>(PdfEncryption.java:148)
    at com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj(PdfReader.java:914)
    at com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1294)
    at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:643)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:187)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:212)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:202)

使用Maven将项目构建为可运行的.jar,并使用以下依赖项:
iText 5.4.2
bouncycastle 1.48

我应该提一下,jasperreports有自己的iText和bouncycastle的依赖关系:
iText 2.1.7
bouncycastle 1.38

我无法弄清楚正在发生什么并需要帮助。

4 个答案:

答案 0 :(得分:26)

我最好的猜测是你在类路径上最终得到了两个不同版本的Bouncy Castle,它发生了,所以类加载器已经从一个版本加载了超类,现在正试图从另一个版本加载子类。版本不同,其中一个定义了最终的equals方法。

答案 1 :(得分:4)

如果出现同样的错误,我的解决方案可能会派上用场。 在我的情况下,我所做的只是pdf文档的数字签名,使用Maven我有两个IText(itextpdf.jar /版本5.4.2)&amp; bouncycastle(bcprov-jdk15on.jar / version 1.55)依赖于我的pom.xml。然后我读了这篇关于 Bouncycastle相关问题的iTextDigital Signatures for PDF documents 的一部分。我删除了Bouncycastle(bcprov-jdk15on.jar /版本1.55)依赖关系,错误是去了(noob错误 - bouncycastle依赖已经是itext依赖的一部分,不需要单独使用两个)。

注意:如果在删除bouncycastle依赖项check this后遇到任何Bouncycastle类文件未找到错误

答案 2 :(得分:0)

我遇到了类似的问题,因为我在类路径上有两个不同的工件:

<groupId>org.bouncycastle</groupId>
<artifactId>bcprov</artifactId>

 <groupId>org.bouncycastle</groupId>
 <artifactId>bcprov-jdk15on</artifactId>

我排除了 bcprov ,该问题为我解决了这个问题。

答案 3 :(得分:0)

有同样的问题,并且以一种奇怪的方式解决了。我要做的就是添加bcprov-ext

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-ext-jdk15on</artifactId>
        <version>1.52</version>
    </dependency>