如何从 Java 中读取 proto3 自定义选项

How to read a proto3 custom option from Java

提供以下服务:

message Message {
  string content = 1;
}

service EchoService {
  rpc echo (Message) returns (Message) {
    option (google.api.http) = { get: "/echo" };
  }
}

我想阅读 Java 中的选项。我的理解是以下代码应该有效:

HttpRule rule = Message.getDescriptor()
  .getOptions()
  .getExtension(AnnotationsProto.http)

然而这并没有编译,抱怨无法解析方法的输入问题。

我正在努力遵循这个:https://developers.google.com/protocol-buffers/docs/proto.html#customoptions

所以问题是,如何从 Java 读取选项?

好尴尬,其实是完全不同的类型。

AnnotationsProto.http 使用 MethodOptions (https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/DescriptorProtos.MethodOptions.html)

的泛型实现类型

Message.getDescriptor().getOptions().getExtensions() 需要一个泛型为 MessageOptions (https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/DescriptorProtos.MessageOptions.html)

的参数

方法选项 vs 消息选项 - 也许我需要深入了解 specsavers...

以下 groovy 代码将获取 http 注释


import com.google.api.AnnotationsProto

        def methodDescriptorSupplier = (ProtoMethodDescriptorSupplier) grpcMethodDescriptor.getSchemaDescriptor()
        def extension = methodDescriptorSupplier.getMethodDescriptor().getOptions().getExtension(AnnotationsProto.http)