Технически не так много, чтобы предотвратить это . Два больших препятствия:
- с вызываемым во время выполнения анализатором для чтения .proto и
- с доступным клиентом общего назначения gRP C, который принимает такие вещи, как служба имя метода в виде литералов
Возможно и то, и другое, но ни одно из них не является тривиальным.
Для 1 грубым способом было бы выполнить shell / invoke protoc
, используя опцию descriptor-set для создать двоичный файл схемы, а затем десериализовать его как FileDescriptorSet
(из descriptor.proto); эта модель дает вам доступ к тому, как protoc
видит файл. Некоторые платформы также имеют собственные синтаксические анализаторы (по существу, переопределяющие protoc
как библиотеку на этой платформе), например, protobuf- net .Reflection делает это в. NET -land
Для 2 вот реализация этого в C#. Подход должен быть достаточно переносимым на Java, даже если детали различаются. Вы можете посмотреть на сгенерированную реализацию, чтобы увидеть, как она работает на любом конкретном языке.
(Извините, что указанные примеры c - это C # /. NET, но там я живу; Подходы должны быть переносимыми, даже если указанный c код: не напрямую)