java - InvalidProtocolBufferException 尝试获取主模块包 ID

标签 java daml

我正在尝试使用 java ledger api 并基于 ping pong 示例来设置一个应用程序。但是,方法“containsModule”抛出异常:

InvalidProtocolBufferException.java “协议(protocol)消息嵌套级别过多。可能是恶意的。使用 CodedInputStream.setRecursionLimit() 增加深度限制。”

在这一行:

//parse the archive payload
DamlLf.ArchivePayload payload = DamlLf.ArchivePayload.parseFrom(getPackageResponse.getArchivePayload());

你能帮忙解决一下吗? 谢谢。

最佳答案

包通常太大,protobuf 无法消化。根据错误提示,您可以显式设置递归限制,例如

CodedInputStream cos =
  CodedInputStream.newInstance(getPackageResponse.getArchivePayload());
cos.setRecursionLimit(1000);
DamlLf.ArchivePayload payload = DamlLf.ArchivePayload.parser().parseFrom(cos);

我们将修复该示例,感谢您指出这一点。

关于java - InvalidProtocolBufferException 尝试获取主模块包 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690867/

相关文章:

node.js - 如何使用 Nodejs 绑定(bind)从 DAML 中的存档合约中获取数据?

java - 带有 "OR"的 return 语句是什么类型的递归?

java - 如何扩展JavaDoc 5.0 标准doclet?

java - 为什么我的二进制到十进制转换程序读不到 0?

java - Spring Boot 多模块 servletDispatchers

daml - DAML场景下,如何复用getParty?

daml - 获取今天日期的函数?

typescript - 如何按时间倒序排列 create-daml-app 项目中的消息?

java - JTable 只显示右边的长文本