【问题标题】:iText/BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable and org.bouncycastle.tsp.TimeStampTokenInfoiText/BouncyCastle ClassNotFound org.bouncycastle.asn1.DEREncodable 和 org.bouncycastle.tsp.TimeStampTokenInfo
【发布时间】:2012-05-10 14:24:50
【问题描述】:

我正在尝试使用iText Java。 当您运行示例“how to sign”时,会出现以下错误:

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

根据"Getting Started with iText - How to sign a PDF using iText",我必须使用BouncyCastle

我从BouncyCastle download page.下载了文件: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...
现在我有两个罐子了。

当您运行该示例时,会出现以下错误:

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

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

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

【问题讨论】:

    标签: java exception cryptography itext bouncycastle


    【解决方案1】:

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

    要找出项目中要包含的依赖项,请打开您正在使用的版本的 itextpdf pom.xml 文件(例如 5.3.2、here)并搜索 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>
    

    【讨论】:

    • bcprov-jdk15on: 1.48 也可以,目前包含在上面提到的 Kıvanç Sahici 的额外 jars ZIP 文件中
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用 itextpdf 版本 5.5.4 org.bouncycastle 依赖项标记为 &lt;optional&gt;true&lt;/optional&gt;。这意味着您必须在自己的 pom 中包含这些依赖项,否则您可能会遇到 classnotfound 异常。

      <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>
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            要么

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

            • 自己构建 iText(SVN 主干已修复)。 iText 可以使用 Maven 构建(在 SVN 的根目录下有一个简短的 readme file)。请注意,风险自负,主干中可能存在错误。

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

            更多信息可以找到in this thread

            【讨论】:

            【解决方案8】:

            奇怪的是 bouncycastle.org 上提供的罐子似乎不包含这个类。也许,您可能想使用this page (link) 中列出的位置之一。

            【讨论】:

            • 令我大吃一惊的是,他们删除了这个类,但仍然从他们自己的 jar 文件中引用它。我们有一个接触 BouncyCastle 的测试,并得到完全相同的错误。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-18
            • 1970-01-01
            • 2015-06-24
            • 2011-12-07
            相关资源
            最近更新 更多