如何从 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)
提供以下服务:
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)