iText / BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable and org.bouncycastle.tsp.TimeStampTokenInfo

我正在尝试使用iText Java。 当您运行示例“ 如何签名 ”时,会发生以下错误:

Caused by: java.lang.ClassNotFoundException: org.bouncycastle.tsp.TimeStampTokenInfo 

根据“iText入门 – 如何使用iText签署PDF” ,我必须使用BouncyCastle 。

我从BouncyCastle下载页面下载了文件:bcprov-jdk15on-147.jar 。
并添加到项目中:Java Build Path / Libraries / Add External JARs …

我添加了以下行:

 Security.addProvider(new BouncyCastleProvider()); 

运行该示例时,会发生相同的错误。
所以我下载了另一个文件:bcpkix-jdk15on-147.jar,标题为“PKIX / CMS / EAC / PKCS / OCSP / TSP / OPENSSL”
并添加到项目中:Java Build Path / Libraries / Add External JARs …
现在我有两个jar子。

运行该示例时,会发生以下错误:

 Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable 

我尝试下载文件“bcprov-ext-jdk15on-147.jar”但没有解决问题。

我在Windows 7 64位上使用iText 5.2.1和eclipse。

BouncyCastle库正在进行大量的API更改,这破坏了与iText等其他库的兼容性。

  • 使用以前版本的BouncyCastle库。 旧版本可以在这里找到。 但是,您必须找到与此特定版本的BC兼容的正确版本的iText。

  • 制作自己的iText版本(已修复SVN中继)。 可以使用Maven构建iText(SVN的根目录下有一个简短的自述文件 )。 请注意,由您自行承担风险,主干可能存在错误。

  • 等待下一版iText。 根据我的经验,iText发布每两个月发布一次,有时更频繁,有时更少。 我不是iText提交者,所以我不能给你任何ETA。

可以在此主题中找到更多信息

iText将bouncycastle依赖项标记为可选。 如果需要它们,则需要在自己的pom文件中添加依赖项。

要找出要包含在项目中的依赖项,请打开您正在使用的版本的itextpdf pom.xml文件(例如5.3.2, 此处 )并搜索2个bouncycastle依赖项。

   org.bouncycastle bcprov-jdk15on 1.47 true   org.bouncycastle bcmail-jdk15on 1.47 true  

将它们复制到您的pom文件中并删除可选选项。

   com.itextpdf itextpdf 5.3.2   org.bouncycastle bcprov-jdk15on 1.47   org.bouncycastle bcmail-jdk15on 1.47  

使用itextpdf版本5.5.4 org.bouncycastle依赖项标记为true 。 这意味着你必须在你自己的pom中包含这些依赖项,或者你可以遇到classnotfoundexception。

  com.itextpdf itextpdf 5.5.4    org.bouncycastle bcprov-jdk15on 1.49   org.bouncycastle bcpkix-jdk15on 1.49  

从bcprov-jdk15on-147的版本开始,在org.bouncycastle.asn1的路径下不再存在DEREncodable类。 您可以使用146之前的版本(包括146)来解决此问题。

奇怪的是,bouncycastle.org上的jar子似乎不包含这个类。 也许,您可能想要使用此页面中列出的位置(链接) 。

我有同样的问题,但当我下载libreria并在/ WEBINF / LIB上更新这些文件时修复它

幸运的是,依赖jar正在与iText一起交付。

请检查下面的存储库链接并下载extrajars.zip文件

http://sourceforge.net/projects/itext/files/

对于同样失败的jruby-ers,我从jruby-complete-1.6.6.jar更新到jruby-complete-9.1.13.0.jar,问题似乎解决了… FWIW ……