我想从定义消息协议的字符串中获取proto Descriptor。例如,我有:
public final static String schema = ""
+ "message Person {\n"
+ " required string id = 1;\n"
+ " required string name = 2;\n"
+ "}";
@Test
public void dynamicProto() throws IOException {
DescriptorProtos.DescriptorProto descriptor = DescriptorProtos.DescriptorProto.parseFrom(schema.getBytes());
boolean test = true;
//do stuff
}
我收到以下异常:com.google.protobuf.InvalidProtocolBufferException:协议消息标记的线路类型无效。
最终我希望能够在运行时定义模式并接受实际的proto消息,而不是为某些模拟服务类型的东西编译时间。
答案 0 :(得分:1)
尝试创建schema
字符串的描述符格式文件。如果您的消息在schema.proto
文件中进行了描述,则可以执行:
protoc --descriptor_set_out=desc.pb schema.proto
稍后,您应该使用以下命令在Java中加载该文件:
InputStream input = new FileInputStream("desc.pb");
DescriptorProtos.DescriptorProto desc=DescriptorProtos.DescriptorProto.parseFrom(input);