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);
Мы исправим пример, спасибо за указание на это.