我正在开发一个使用Google Protocol Buffers的Client-Server应用程序。 不幸的是,当我使用构建器模式在服务器端构建协议缓冲区响应时,我得到一个IndexOutOfBoundsException:
这是我构建protobuf文件的行:
Builder getVGResonseBuilder = App_getVGResponse.GetVGResponse.newBuilder().getVGBuilder(0);
[some more code that uses the builder patterns]
getVGResponseBuilder.set...
getVGResponseBuilder.set...
第一行代码中出现错误。
这里是protobuf定义(ofc我编译了它!编译后的calss是App_getVGResponse):
message GetVGResponse {
message VG {
optional string id = 1;
optional string g_id = 2;
optional int64 f_id = 3;
optional string g_name = 4;
}
repeated VG v_gp = 1;
}
以下是我的stacktrace的摘录
Exception in thread "main" com.google.protobuf.InvalidProtocolBufferException: **Protocol message tag had invalid wire type.**
at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:78)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:498)
at com.google.protobuf.GeneratedMessage$Builder.parseUnknownField(GeneratedMessage.java:439)
并且运行时的调试器显示变量:
e
-> cause: IndexOutOfBoundsException (id=12291)
-> detaiMessage: Index: 0, Size: 0 (id=12324)
-> stackTrace null
答案 0 :(得分:1)
我个人创建了“子构建器”,然后将其添加到父构建器。即。
App_GetVGResponse.GetVGResponse.Builder bldr = App_GetVGResponse.GetVGResponse.newBuilder();
App_GetVGResponse.GetVGResponse.VG.Builder childBldr = App_GetVGResponse.GetVGResponse.VG.newBuilder();
childBldr.setId(value);
...........
bldr.addVGp(childBldr);
我认为错误是因为在添加一个
之前你得到了“子”构建器