Динамический анализ текстового файла.proto во время выполнения для генерации дескрипторов
В настоящее время я работаю над буфером протокола Google и должен генерировать динамические сообщения. У меня уже есть мои.proto файлы, определенные как показано ниже.
message TSInbound
{
string id = 1;
map<string,string> state = 2;
map<string,string> reading =3;
}
AFAIK, я могу использовать File Descriptor Set для создания динамических сообщений. Но это будет включать использование компилятора для генерации файлов desc. Я хотел бы создать дескриптор без компиляции файлов.proto. Есть ли способ динамического создания сообщения с использованием пользовательских.proto-файлов, а не с помощью protoc?
2 ответа
Я думаю, что вы спрашиваете: "Есть ли способ динамического разбора текста .proto
файлы во время выполнения, чтобы получить дескрипторы."
.proto
Парсер написан на C++. Доступен как библиотека libprotoc.so
, Теоретически вы могли бы написать обертку JNI для этого, чтобы выполнять анализ во время выполнения. Тем не менее, нет (официального) синтаксического анализатора чистой Java для .proto
файлы.
Я только что нашел решение от confluent, точнее «io.confluent:kafka-protobuf-serializer», которое позволяет сделать это очень простым способом.
ProtobufSchema schema = new ProtobufSchema(
Files.readString(
Path.of("/anyPath/test.proto")
)
);
Descriptor descriptor = schema.toDescriptor();
Message deserializedMessage = DynamicMessage.parseFrom(descriptor, messageByteArr);