Java gRPC устанавливает уровень рекурсии

#java #grpc #protobuf-java

#java #grpc #protobuf-java

Вопрос:

Я работаю над приложением Java SpringBoot, используя Protobuf и gRPC для связи между несколькими модулями. Одно из моих сообщений protobuf имеет форму дерева, имеющего более 100 уровней вложенности (специально). Когда я хочу отправить это сообщение protobuf через gRPC, я получаю ошибку gRPC:

 Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message had too many levels of nesting.  May be malicious.  Use CodedInputStream.setRecursionLimit() to increase the depth limit. 
 

Поскольку этот уровень вложенности предназначен и предназначен, я хочу увеличить уровень рекурсии. Показано в сообщении об ошибке, это можно сделать с помощью CodedInputStream.setRecursionLimit() . К сожалению, я не могу найти способ, как установить этот предел рекурсии CodedInputStream , поскольку я не нашел способа получить этот поток. Единственное CodedInputStream , что я обнаружил, — это автоматически сгенерированные классы Java, созданные компилятором gRPC. Есть ли какой-либо другой способ установить этот уровень рекурсии?

Комментарии:

1. На какой предел вы надеетесь? Ограничение существует, чтобы избежать StackOverflowError, поэтому оно не может быть неограниченным. Связанный: github.com/grpc/grpc-java/issues/8256 и github.com/grpc/grpc/issues/24633