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

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

Для jruby-ers с той же ошибкой я обновил jruby-complete-9.1.13.0.jar с jruby-complete-1.6.6.jar, и проблема, похоже, разрешилась...FWIW...

Другие вопросы по тегам