java - 如何将 OnlineTSPSource 与 esig/dss 库一起使用?
问题描述
我正在尝试将在线时间戳授权 (rfc3161) 与数字签名服务Java 库一起使用。但是,以下代码段(来自他们的测试用例,与他们的Cookbook中的类似):
String tspServer = "http://tsa.belgium.be/connect";
OnlineTSPSource otsp = new OnlineTSPSource(tspServer);
/* tried setting otsp.setDataLoader(new TimestampDataLoader());
too, as it defaults to otsp.setDataLoader(new
NativeHTTPDataLoader()); the exception happens in both cases */
byte[] digest = DSSUtils.digest(DigestAlgorithm.SHA1, "Hello world".getBytes());
TimeStampToken timeStampResponse =
otsp.getTimeStampResponse(DigestAlgorithm.SHA1, digest);
总是以以下异常结束:
eu.europa.esig.dss.DSSException:
java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError:
org.apache.commons.io.IOUtils.closeQuietly(Ljava/io/Closeable;)V
已经尝试过许多不同的公共 rfc3161 服务器(一些在此处列出)。当然那里出了点问题,但是,作为一个初学者,我不明白哪里出了问题(应该有什么方法)。
如果有人能让我找到正确的方向来让代码片段正常工作(或者甚至可以用 Java 的 bouncycastle 评论关于 cades/xades/pades 的可靠启动指南),我将不胜感激。
解决方案
正如Marteen Bodewes和Mark Rotteveel在评论中所述,类路径中的 Apache Commons-IO 版本存在问题。该项目是使用 Apache Maven 设置的,并且有一个旧的 Commons-IO 版本在那里声明为依赖项。在这种情况下,删除该声明就足够了,因此 Maven 可以下载声明为 esig/DSS 依赖项的适当版本。
esig/DSS 版本当时是 5.4。
推荐阅读
- python - Python:根据变量名称动态命名数据框的自定义函数
- libgdx - 多个屏幕的 Gdx.input.setInputProcessor。(LIBGDX,概念)
- python - 错误: (-215:Assertion failed) s >= 0 in function 'cv::setSize' using LBPHFaceRecognizer
- windows - 在 Windows 上加载加密模块时出错
- objective-c - 按顺序复制视图的正确方法(如 tableView 中的单元格)
- typescript - Jest 无法识别我的自定义类型
- json - 在打字稿中的两个对象数组之间获取不匹配的对象
- numerical-methods - OpenModelica 中的非线性系统迭代
- r - 带有动态标题的 addTooltip
- r - 检查一个数据框中的日期是否在另一个数据框中的日期范围内,并在为 true 时返回行