iText/BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable and org.bouncycastle.tsp.TimeStampTokenInfo
Я пытаюсь использовать iText Java. При запуске примера " как подписать" возникает следующая ошибка:
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.tsp.TimeStampTokenInfo
В соответствии с "Начало работы с iText - Как подписать PDF с помощью iText", я должен использовать BouncyCastle.
Я загрузил файл: bcprov-jdk15on-147.jar со страницы загрузки BouncyCastle.
И добавил в проект: Java Build Path/ Библиотеки / Добавить внешние JAR-файлы...
Я добавил следующую строку:
Security.addProvider(new BouncyCastleProvider());
При запуске примера возникает та же ошибка.
Поэтому я скачал другой файл: bcpkix-jdk15on-147.jar, озаглавленный "PKIX/CMS/EAC/PKCS/OCSP/TSP/OPENSSL"
И добавил в проект: Java Build Path/ Библиотеки / Добавить внешние JAR-файлы...
Теперь у меня есть две банки.
При запуске примера возникает следующая ошибка:
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable
Я попытался загрузить файл "bcprov-ext-jdk15on-147.jar", но не решил проблему.
Я использую iText 5.2.1 и затмение на Windows 7 64 бит.
8 ответов
В библиотеках BouncyCastle происходят серьезные изменения API, которые нарушают совместимость с другими библиотеками, такими как iText.
Или
используйте предыдущую версию BouncyCastle libs. Старые версии можно найти здесь. Однако вам нужно будет найти правильную версию iText, которая была бы совместима с этой конкретной версией BC.
сделайте свою собственную сборку iText (ствол SVN был исправлен). iText может быть собран с Maven (есть короткий файл readme в корне SVN). Обратите внимание, что это на ваш страх и риск, в багажнике могут быть ошибки.
ждать следующей версии iText. По моему опыту, релизы iText приходят каждые пару месяцев, иногда чаще, иногда реже. Хотя я не приверженец iText, поэтому не могу дать вам ETA.
Более подробную информацию можно найти в этой теме
iText помечает зависимости bouncycastle как необязательные. Если они вам нужны, вам нужно добавить зависимости в ваш собственный файл pom.
Чтобы узнать, какую зависимость включить в ваш проект, откройте файл itextpdf pom.xml используемой вами версии (например, 5.3.2, здесь) и найдите 2 зависимости bouncycastle.
<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>
Скопируйте их в свой файл pom и удалите необязательный параметр.
<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>
В версии itextpdf 5.5.4 зависимости org.bouncycastle помечаются как <optional>true</optional>
, Это означает, что вы ДОЛЖНЫ включить эти зависимости в свой собственный pom, или вы можете столкнуться с исключениями, не найденными в классе.
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.4</version>
</dependency>
<!-- Bouncycastle dependencies necessary as they are optional = true
in itextpdf ... but they're not-so-optional in reality -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.49</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.49</version>
</dependency>
Начиная с версии bcprov-jdk15on-147, класс DEREncodable больше не существует по пути org.bouncycastle.asn1. Вы можете использовать версию до 146 (включая 146), чтобы решить этот вопрос.
У меня та же проблема, но я ее исправляю, когда загружаю libreria и обновляю эти файлы в /WEBINF/LIB
Странно, что банки, доступные на bouncycastle.org, не содержат этот класс. Возможно, вы захотите использовать один из мест, перечисленных на этой странице (ссылка).
К счастью, фляги зависимости теперь поставляются вместе с iText.
Пожалуйста, проверьте ссылку на репозиторий ниже и загрузите файл extrajars.zip
Для jruby-ers с той же ошибкой я обновил jruby-complete-9.1.13.0.jar с jruby-complete-1.6.6.jar, и проблема, похоже, разрешилась...FWIW...