我们有一个应用程序可以创建未发布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
我无法弄清楚正在发生什么并需要帮助。
答案 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相关问题的iText书Digital 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>