2014-03-19 34 views
1

我使用iText 5.5.0和BouncyCastle bcprov-jdk15on-1.50對PDF進行數字簽名。如果我在MakeSignature.signDetached方法中沒有包含時間戳,那麼這一切都可以正常工作。java.lang.NoClassDefFoundError:org/bouncycastle/asn1/ASN1Encodable

當我使用TSAClient指定TSAURL,我的代碼給我的錯誤

java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable at MakeSignature.signDetached method 

和我的程序得到,即使我處理的異常終止。

我嘗試了不同版本的bouncycastle罐子,但是我得到了相同的錯誤,在類中找不到相同的錯誤。

我真的需要包含在簽名中的時間戳。我該怎麼辦。

+0

什麼是'jdk15on'信息,以及你是如何包括罐子? Maven iText構建包括具有您提及的類的工件,並且它也出現在我在Central上列出的所有BC版本中。 – chrylis

+0

bcprov-jdk15on-1.50.jar是我在互聯網上找到的BouncyCastle的最新版本。我在eclipse中使用'添加外部jar'來將jar包含在我的項目中。是的,所有BC版本都列出了ASN1Encodable類,但在最新版本中,它是作爲接口而不是類的。我不確定這可能會導致問題。 – user3412670

+0

請首先嚐試maven依賴關係中提到的版本(當前是1.49)。已知Bouncy Castle會在看似微小的版本更改中對基本API進行更改。 – mkl

回答

2

您可以在以下URL中檢查itext 5.5的依賴關係。

http://mvnrepository.com/artifact/com.itextpdf/itextpdf/5.5.0

根據這一頁,相應BouncyCastle的版本爲5.5的iText是1.49。我在互聯網上的某個頁面上閱讀,bouncycastle正在發生巨大的變化,並且通常很難爲特定版本的itext找到相應版本的bouncycastle。

0

請下載bcprov-jdk15on-150.jar(用於JDK 1.5 - 1.7)從下面給出的鏈接文件,並在你的項目添加到解決java.lang.NoClassDefFoundError:組織/ BouncyCastle的/ ASN 1/ASN1Encodable例外。

http://www.bouncycastle.org/latest_releases.html

根據你的JDK版本發現從上面的鏈接適當的jar文件。

+1

使用iText 5.5.x我們只推薦使用BouncyCastle 1.49,這是我們使用的唯一版本。已知BouncyCastle不尊重語義版本,並在小版本更改中進行不兼容的API更改,如@mkl在上面所述。這就是爲什麼我下調(披露:我是QA工程師@ iText軟件)。 –

0

在您的項目中包含iText的推薦方法是使用Maven。然後,Maven將爲您解決依賴關係。我讀過你使用Eclipse,Eclipse有一個非常好的Maven插件。

pom.xml將這個:

<dependency> 
    <groupId>com.itextpdf</groupId> 
    <artifactId>itextpdf</artifactId> 
    <version>5.5.8</version> 
</dependency> 

更可在http://developers.itextpdf.com/itext-java