有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我在项目中更改了一些与此问题无关的内容,并将所有内容运行了几次。现在它似乎起作用了。 可悲的是,我不知道原因是什么,也不知道我是如何解决的,因为就像我写的那样,我改变了一些与这个问题毫无关系的东西