问题标签 [protobuf-java]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
778 浏览

java - 如何使用描述符(protobuf,java)将字节数组解析为 GeneratedMessage?

给定一个FieldDescriptor和 a byte[],我如何将后者解析为我的GeneratedMessage实现?我看不到对相应 java 类(包含 generated parseFrom(byte[] data))的任何引用,也看不到任何返回类似Parser<? extends GeneratedMessage>.

换句话说,我无法弄清楚如何对字段(而不是整个消息)执行相同的操作( Java 中 PB 的通用解析)。

0 投票
1 回答
820 浏览

protocol-buffers - 在 Protobuf 消息中引用任意字段的方法

我正在寻找协议缓冲区消息中任意字段的字符串表示形式。有没有实现这个的库?我已经研究过使用字段掩码,但是它们对重复字段没有强有力的支持。

0 投票
1 回答
865 浏览

protocol-buffers - 从 C++ 服务器反序列化 protobuf 数据时,Java 客户端出现 InvalidProtocolBufferException

我有这样的 protobuf 消息:

在服务器端(C++),我们将这个字段设置如下(LLDP 是外部类,Interfaces 在里面):

在客户端(Java)上,我们像这样提取这个字段:

这会引发 InvalidProtocolBufferException 异常。当我在我的 Java 客户端中转储“更新”时,我看到:

type_url 对我来说似乎是正确的。我在这里做错了什么?

谢谢你的时间。

编辑#1:

我查看了异常字符串。它是“Any 消息的类型与给定的类不匹配”。

C++ 和 Java 使用相同的 proto 文件,但我在 C++ 中看到“openconfig_lldp.Lldp.Interfaces”,而在 Java 中它是“OpenconfigLldp.Lldp.Interfaces”。需要找出原因。。

编辑#2:

使用相同的 .proto 文件。在这种情况下,它是:

对于 Java,我在名为 openconfig_lldp 的包中看到父类为 OpenconfigLldp。

在 C++ 中,我没有看到任何名为“OpenconfigLldp”的类生成。相反,它只是“Lldp”

所以,Any.protobuf 中的 type_url 是不匹配的。C ++方面将其作为

在 Java 端,我使用:

任何人都想过为什么在 Java 协议输出中有一个包装类?

编辑#3

显然看起来是因为“outer_class_name”。在 Java 代码中,我有一个外部类“OpenconfigLldp”。

type_url 格式为:

因此,C++ 代码将其设置为 openconfig_lldp.Lldp.Interfaces。但是,这映射到 Java 中的 OpenconfigLldp.Lldp.Interfaces。

我该如何解决这个问题?

最后的编辑和最后的问题

经过一番挖掘,这就是我发现的。默认情况下,type_url 是:

在 Java 方面,我查看了 Any 实现。它试图将其与以下内容进行比较:

我通过打印发现了这一点:

所以,我破解了 C++ 端发送:

所以,我想我知道这里发生了什么!

感谢您阅读所有编辑。

0 投票
1 回答
3053 浏览

mongodb - 在 Mongodb 中存储 protobuf java 对象的简单方法?

当需要存储以 Java 实例形式(来自生成的 java 类)的 protobuf3 消息时,最好的选择是存储对象本身,然后再从数据库中读取它。

我的用例是将此类消息存储在 Mongodb 中。在调查这个的时候,我找不到办法,所以决定在这里问。

0 投票
1 回答
928 浏览

java - Protoc Java 插件的依赖项?

我正在尝试在How to write a custom Protobuf CodeGenerator in Java中制作工作示例。当我尝试用

我收到编译错误,因为 CodeGenerator 是未知的。我的 pom.xml Maven 文件中有以下“依赖项”标签 -

我还需要向依赖项添加什么才能使我的插件正常工作?我计划使用来自https://developers.google.com/protocol-buffers/docs/reference/java/的 Java API 。

0 投票
2 回答
811 浏览

java - 如何从 java maven 项目生成 python protobuf

我有 maven 项目,其中我定义了各种.proto文件,其相应的 java 文件是通过 maven 插件生成的。这个生成的文件将用于实现 [rpc - 服务器实现],但我希望它被 python 客户端使用。

因此需要 python 等价于这些 proto 文件。一种方法是手动python protobuf对这些文件运行命令.proto并生成代码,但这太手动了。我正在寻找其他选择。

任何帮助,将不胜感激。

0 投票
4 回答
1220 浏览

apache-spark - 当 Kryo 序列化与 Spark 一起使用时 ProtoBuf 中的 NullPointerException

当我的 Spark 应用程序尝试序列化作为键字符串和值浮点数的映射的 protobuf 字段时,我在我的 Spark 应用程序中收到以下错误。在 spark 应用程序中使用了 Kryo 序列化。

有没有人遇到过这个问题?有没有办法解决它?

0 投票
1 回答
2308 浏览

java - Protobuf 映射类型 JSON 格式使用字符串文字“键”和“值”而不是实际值

我正在尝试将 protobuf 对象转换为 JSON 格式,com.googlecode.protobuf.format.JsonFormat但该map类型出乎意料。

我的消息是这样的

Response问题是我创建的对象的 JSON 格式

我希望将错误格式化为由字符串值(映射键的)键控的映射

但是实际输出是(我只评估了new JsonFormat().printToString(response)intellij 中的部分)

我希望这是我错过的一些小配置,以使 protobuf(或杰克逊?)了解实际的键值?不使用“键”和“值”。

顺便说一句,在类型中具有文字“键”和“值”字段有什么意义map?您不能使用它进行成分查找,您可能只使用自定义类型/对象。

0 投票
0 回答
175 浏览

protocol-buffers - protobuf 插件,用于增强生成的 java 类

我正在寻找在实践中使用 protobuf 插件架构的任何示例。

最终,我想为生成的 java 类添加自定义注释。但还没有走远。我不太明白插入点https://developers.google.com/protocol-buffers/docs/reference/java-generated#plugins是如何工作的,以及如何利用生成的文件结构。

我正在寻找任何可以告诉我如何做这样的事情的建议或示例

0 投票
1 回答
1182 浏览

java - 将 protobuf-lite 消息转换为 JSON 并返回

使用常规 Java Protobuf 时,您可以使用JsonFormatfromcom.google.protobuf:protobuf-java-util将 Protobuf 消息转换为 JSON 字符串,然后再转换回来。

但是是否存在适用于 Java Protobuf Lite的转换器?JsonFormat不幸的是,只支持常规的 Java Protobuf 消息。