java.lang.NoSuchMethodError: org.bouncycastle.asn1.x509.GeneralName.getDERObject()
java.lang.NoSuchMethodError: org.bouncycastle.asn1.x509.GeneralName.getDERObject()
我已经将项目从 itext2.1.7.jar 迁移到 itext5.5.13.jar但是在测试具有签名的 pdf 时出现以下错误:
java.lang.NoSuchMethodError: org.bouncycastle.asn1.x509.GeneralName.getDERObject()
这是我出错的方法:
public URI getCrlUri(X509Certificate certificate) {
byte[] crlDistributionPointsValue = certificate.getExtensionValue(Extension.cRLDistributionPoints.getId());
if (null == crlDistributionPointsValue) {
return null;
}
CRLDistPoint distPoint=null;
try {
distPoint = CRLDistPoint
.getInstance(JcaX509ExtensionUtils.parseExtensionValue(crlDistributionPointsValue));
} catch (IOException e) {
e.printStackTrace();
}
DistributionPoint[] distributionPoints = distPoint.getDistributionPoints();
for (DistributionPoint distributionPoint : distributionPoints) {
DistributionPointName distributionPointName = distributionPoint.getDistributionPoint();
if (DistributionPointName.FULL_NAME != distributionPointName.getType()) {
continue;
}
GeneralNames generalNames = (GeneralNames) distributionPointName.getName();
GeneralName[] names = generalNames.getNames();
for (GeneralName name : names) {
if (name.getTagNo() != GeneralName.uniformResourceIdentifier) {
continue;
}
final DERIA5String derStr = DERIA5String.getInstance(name.getDERObject());
String str = derStr.getString();
URI uri = toURI(str);
return uri;
}
}
return null;
}
在我的 class 路径中,我放置了:
1.bcprov-jdk15on-1.49.jar
2.bcpkix-jdk15on-1.49.jar
3.itextpdf-5.5.13.jar
我根据下载 itextpdf 时得到的 pom.xml 添加了 BouncyCastle 库。
这个项目是建立在以下充气城堡库之上的
1.bcmail-jdk16-143.jar
2.bcprov-jdk16-143.jar
3.bctsp-jdk16-1.44.jar
任何人都可以帮助解决这个问题。
当您更新代码的依赖项(此处:iText)和传递依赖项(此处:BouncyCastle),并且您也在自己的代码中使用这些传递依赖项时,您还必须做好准备使您的代码适应传递依赖项的变化。
在这种情况下,您使用 GeneralName.getDERObject()
:
final DERIA5String derStr = DERIA5String.getInstance(name.getDERObject());
该方法存在于早期的 BouncyCastle 版本中,尤其是 1.30 年代。在 1.40 年代,此方法被 getEncoded()
或 getEncoded("DER")
取代。因此,尝试这样的事情:
final DERIA5String derStr = DERIA5String.getInstance(name.getEncoded("DER"));
但请注意,在那些日子里,BouncyCastle API 非常不稳定,您可能需要使用 BouncyCastle 调整更多代码...
在您提到的评论中
now I'm getting :java.lang.IllegalArgumentException: encoding error in getInstance: java.lang.ClassCastException: org.bouncycastle.asn1.DERTaggedObject cannot be cast to org.bouncycastle.asn1.DERIA5String
请尝试
final DERIA5String derStr = DERIA5String.getInstance(name.getName());
相反。
我已经将项目从 itext2.1.7.jar 迁移到 itext5.5.13.jar但是在测试具有签名的 pdf 时出现以下错误:
java.lang.NoSuchMethodError: org.bouncycastle.asn1.x509.GeneralName.getDERObject()
这是我出错的方法:
public URI getCrlUri(X509Certificate certificate) {
byte[] crlDistributionPointsValue = certificate.getExtensionValue(Extension.cRLDistributionPoints.getId());
if (null == crlDistributionPointsValue) {
return null;
}
CRLDistPoint distPoint=null;
try {
distPoint = CRLDistPoint
.getInstance(JcaX509ExtensionUtils.parseExtensionValue(crlDistributionPointsValue));
} catch (IOException e) {
e.printStackTrace();
}
DistributionPoint[] distributionPoints = distPoint.getDistributionPoints();
for (DistributionPoint distributionPoint : distributionPoints) {
DistributionPointName distributionPointName = distributionPoint.getDistributionPoint();
if (DistributionPointName.FULL_NAME != distributionPointName.getType()) {
continue;
}
GeneralNames generalNames = (GeneralNames) distributionPointName.getName();
GeneralName[] names = generalNames.getNames();
for (GeneralName name : names) {
if (name.getTagNo() != GeneralName.uniformResourceIdentifier) {
continue;
}
final DERIA5String derStr = DERIA5String.getInstance(name.getDERObject());
String str = derStr.getString();
URI uri = toURI(str);
return uri;
}
}
return null;
}
在我的 class 路径中,我放置了: 1.bcprov-jdk15on-1.49.jar 2.bcpkix-jdk15on-1.49.jar 3.itextpdf-5.5.13.jar
我根据下载 itextpdf 时得到的 pom.xml 添加了 BouncyCastle 库。
这个项目是建立在以下充气城堡库之上的 1.bcmail-jdk16-143.jar 2.bcprov-jdk16-143.jar 3.bctsp-jdk16-1.44.jar
任何人都可以帮助解决这个问题。
当您更新代码的依赖项(此处:iText)和传递依赖项(此处:BouncyCastle),并且您也在自己的代码中使用这些传递依赖项时,您还必须做好准备使您的代码适应传递依赖项的变化。
在这种情况下,您使用 GeneralName.getDERObject()
:
final DERIA5String derStr = DERIA5String.getInstance(name.getDERObject());
该方法存在于早期的 BouncyCastle 版本中,尤其是 1.30 年代。在 1.40 年代,此方法被 getEncoded()
或 getEncoded("DER")
取代。因此,尝试这样的事情:
final DERIA5String derStr = DERIA5String.getInstance(name.getEncoded("DER"));
但请注意,在那些日子里,BouncyCastle API 非常不稳定,您可能需要使用 BouncyCastle 调整更多代码...
在您提到的评论中
now I'm getting :java.lang.IllegalArgumentException: encoding error in getInstance: java.lang.ClassCastException: org.bouncycastle.asn1.DERTaggedObject cannot be cast to org.bouncycastle.asn1.DERIA5String
请尝试
final DERIA5String derStr = DERIA5String.getInstance(name.getName());
相反。