协议缓冲区:toByteString()返回空的ByteString

时间:2018-03-26 12:21:30

标签: java protocol-buffers

我的项目中有以下消息类型:

message KeyValue {

    oneof content {
        StringKeyValue string_key_value = 1;
        // ...
    }

}

message StringKeyValue {
    string key = 1;
    string value = 2;
}

这种通用类型可以传输任何类型的对象。

message Anything {
    bytes value = 1;
    // ...
}

以下集合中,我想将一些序列化的KeyValue消息转移为Anything。

message List {

    oneof content {
        AnythingList anything_list = 1;
        // ...
    }
}

message AnythingList {
    repeated com.mycompany.Anything value = 1;
}

这意味着我必须将我的KeyValue转换为将StringKeyValue转换为ByteString,然后将其添加到序列化List中,如下所示。这在我的一个项目中工作正常,但在其他项目中只包含一个空的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 个答案:

答案 0 :(得分:0)

我在项目中改变了一些东西,根本没有与这个问题相关,并且运行了几次。现在它似乎工作。 可悲的是,我不知道原因是什么以及我是如何解决它的,因为我写的是我改变了一些与这个问题无关的东西。