Динамический анализ текстового файла.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);
Другие вопросы по тегам