检查Google的Protobuf any.proto
(https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto),可以看到以下选项:
option java_outer_classname = "AnyProto";
为什么然后Any.class
中的AnyProto
不是protobuf-java-x.x.x.jar
的内部类(至少对于版本3.2.0和3.6.1如此)
上下文:
这个问题的原因是我正在使用avro-protobuf
将avro消息转换为Protobuf,并且该库查看Protobuf模式FileDescriptor来查找需要实例化的Protobuf类。当查找Any的文件描述符时,由于上述com.google.protobuf.AnyProto$Any
,此库尝试实例化java_outer_classname
。在我看来,图书馆正在做正确的事情。
这是依靠此元数据实例化该类的代码:
https://github.com/apache/avro/blob/2bbb99602e9e925058ead86fc8ac4e27055b05d6/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtobufData.java#L225