InvalidProtocolBufferException при попытке получить основной идентификатор пакета модуля

Я пытаюсь настроить приложение, используя java ledger api и основываясь на примере пинг-понга. Тем не менее, метод "containsModule" вызывает исключение:

InvalidProtocolBufferException.java "Протокол сообщения имеет слишком много уровней вложенности. Может быть вредоносным. Используйте CodedInputStream.setRecursionLimit(), чтобы увеличить предел глубины."

на этой линии:

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

Не могли бы вы помочь с этим? Благодарю.

1 ответ

Решение

Зачастую пакеты слишком велики, чтобы протобуф мог их переварить. Как следует из ошибки, вы можете установить предел рекурсии явно, например

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

Мы исправим пример, спасибо за указание на это.

Другие вопросы по тегам