4

我想从定义消息协议的字符串中获取一个原型描述符。例如我有:

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:协议消息标签的线路类型无效。

最终,我希望能够定义一个模式并在运行时接受实际的原型消息,而不是一些模拟服务类型的东西的编译时间。

4

1 回答 1

2

尝试创建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);
于 2018-09-01T21:25:36.623 回答