Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

I'm trying to use iText Java. When you run the example "how to sign" the following error occurs:

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

According "Getting Started with iText - How to sign a PDF using iText", I have to use the BouncyCastle.

I downloaded the file: bcprov-jdk15on-147.jar from BouncyCastle download page.
And added to the project: Java Build Path/Libraries/Add External JARs...

I added the following line:

Security.addProvider(new BouncyCastleProvider()); 

When you run the example the same error occurs.
So I downloaded another file: bcpkix-jdk15on-147.jar entitled "PKIX/CMS/EAC/PKCS/OCSP/TSP/OPENSSL"
And added to the project: Java Build Path/Libraries/Add External JARs...
Now I have two Jars.

When you run the example the following error occurs:

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

I tried downloading the file "bcprov-ext-jdk15on-147.jar" but did not solve the problem.

I am using iText 5.2.1 and eclipse on Windows 7 64 bits.

like image 604
Cobaia Avatar asked Apr 30 '12 22:04

Cobaia


2 Answers

iText marks bouncycastle dependencies as optional. If you require them, you need to add the dependencies in your own pom file.

To find out which dependency to include in your project, open the itextpdf pom.xml file of the version you are using (for example 5.3.2, here) and search for the 2 bouncycastle dependencies.

    <dependency>         <groupId>org.bouncycastle</groupId>         <artifactId>bcprov-jdk15on</artifactId>         <version>1.47</version>         <optional>true</optional>     </dependency>     <dependency>         <groupId>org.bouncycastle</groupId>         <artifactId>bcmail-jdk15on</artifactId>         <version>1.47</version>         <optional>true</optional>     </dependency> 

Copy them into your pom file and remove the optional option.

    <dependency>         <groupId>com.itextpdf</groupId>         <artifactId>itextpdf</artifactId>         <version>5.3.2</version>     </dependency>     <dependency>         <groupId>org.bouncycastle</groupId>         <artifactId>bcprov-jdk15on</artifactId>         <version>1.47</version>     </dependency>     <dependency>         <groupId>org.bouncycastle</groupId>         <artifactId>bcmail-jdk15on</artifactId>         <version>1.47</version>     </dependency> 
like image 129
jehon Avatar answered Oct 26 '22 23:10

jehon


BouncyCastle libs are undergoing heavy API changes that broke the compatibility with other libs like iText.

Either

  • use a previous version of BouncyCastle libs. Old versions can be found here. However, you'll have to find the right version of iText that was compatible with this particular version of BC.

  • make your own build of iText (the SVN trunk has been fixed). iText can be build with Maven (there's a short readme file at the root of the SVN). Please note that it's at your own risk, there may be bugs in trunk.

  • wait for the next version of iText. From my experience, iText releases come every couple of months, sometime more often, sometimes less. I'm not an iText committer though, so I can't give you any ETA.

More information can be found in this thread

like image 31
Alexis Pigeon Avatar answered Oct 27 '22 00:10

Alexis Pigeon