java协议缓冲区:toByteString()返回空的ByteString
我的项目中有以下消息类型:
message KeyValue {
oneof content {
StringKeyValue string_key_value = 1;
// ...
}
}
message StringKeyValue {
string key = 1;
string value = 2;
}
这个泛型类型可以传递任何类型的对象
message Anything {
bytes value = 1;
// ...
}
在下面的集合中,我想将大量序列化的KeyValue消息作为任何内容进行传输
message List {
oneof content {
AnythingList anything_list = 1;
// ...
}
}
message AnythingList {
repeated com.mycompany.Anything value = 1;
}
这意味着在将包含StringKeyValue的KeyValue添加到序列化列表时,必须将其转换为ByTestString,如下所示。这在我的一个项目中可以很好地工作,但在另一个项目中只包含一个空的ByteString,尽管StringKeyValue和KeyValue都不是空的
AnythingList.Builder keyValueListBuilder = AnythingList.newBuilder();
keyValueListBuilder.addValue(Anything.newBuilder()
.setValue(KeyValue.newBuilder()
.setStringKeyValue(StringKeyValue.newBuilder()
.setKey("someKey")
.setValue("someValue").build())
.build().toByteString())
.build());
项目的依赖关系不能成为这个问题的原因,因为在两个项目中使用完全相同的依赖关系之后,上面的代码仍然拒绝在一个项目中工作,而在这个项目中,它在一开始就不工作。 遗憾的是,我找不到任何解释,为什么我会得到不同的结果。我的源代码或配置中是否缺少任何东西
先谢谢你
# 1 楼答案
我在项目中更改了一些与此问题无关的内容,并将所有内容运行了几次。现在它似乎起作用了。 可悲的是,我不知道原因是什么,也不知道我是如何解决的,因为就像我写的那样,我改变了一些与这个问题毫无关系的东西