问题标签 [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 回答
749 浏览

android-gradle-plugin - Gradle“排除”故障排除:对 protobuf-java 和 protobuf-lite 的嵌套依赖项

我正在尝试测试我的 Android 应用程序(在设备上),但在 gradle 构建过程中我收到“错误:程序类型已经存在:com.google.protobuf.AnyProto”(或其他类)。

我正在使用 Google Firebase-Firestore DB,它实现了 grpc 并使用嵌套依赖项:com.google.protobuf:protobuf-lite:3.0.1。

此外,google/Capillary 库使用嵌套依赖项:com.google.protobuf:protobuf-java:3.4.0。

如果我仅从 Capillary lib 依赖项中排除 com.google.protobuf,则应用程序将运行,然后在实例化所需的 Capillary 类时崩溃,并出现错误:“java.lang.NoClassDefFoundError:解析失败:Lcom/google/protobuf/生成的消息V3;"

这是我的应用程序依赖项,没有排除:

这是 gradlew app:dependencies 的(树)读数:

我尝试使用几种包排除组合,包括从 Firestore 和 Capillary 中完全排除 com.google.protobuf 并分别实施:

^我已经尝试了几种组合,但没有成功。

当我仅从 Capillary lib 依赖项中排除“com.google.protobuf”时(我没有使用此库的 grpc 功能),我可以让应用程序运行,但是,当来自毛细管库被实例化,出现错误:“java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/protobuf/GeneratedMessageV3;”

有没有人能帮我解决这个问题,这样就没有多余的依赖项或缺少类定义,而不会破坏 Capillary 依赖项的功能?

0 投票
1 回答
747 浏览

java - Spring MVC 使用谷歌 Protobuf 3 生成异常

我需要你们帮助我,拜托!

当我使用重复、fixed64 或 int64 时,我的应用程序会生成以下错误。

**项目 1 **

我的 Protobuf 文件

Spring 配置类

控制器类

**项目 2 **

我的另一个项目。接受者。

我正在使用 Spring 5.1.4、protobuf-java 3.6.1、protobuf-java-util 3.6.1、protobuf-java-format 1.4、Tomcat 9 和 spring-boot-dependencies 2.1.2.RELEASE 和 .proto 文件是相同的对于这两个项目。

当我在项目 1 中使用 parseFrom 时,它可以工作,但是当我在项目 2 中使用时,它不起作用!

**更新**

好吧,经过几次测试,我找到了答案。问题是 Windows (CP1252) 的编码。我需要在启动tomcat9时添加这个配置:

这可行,但不适用于 UTF-8

你能帮助我吗?

谢谢

0 投票
1 回答
2247 浏览

java - 如何处理 Java 中未知的 protobuf 字段?

我有一个 Java 应用程序,它从另一台计算机读取一些 protobuf 数据,然后可以修改一些值并将其写回。用户很可能可以使用过时的 .proto 文件读取数据,因此在这种情况下会有一些它不理解的字段。在写回所做的更改时,我最终希望保留未知数据;但是,我可以满足于仅检测到存在未知数据(提示用户升级他/她的应用程序)。我不清楚如何处理 Java 中的未知字段。

如果有帮助,我使用的是版本 2 .proto 文件,因为我需要它与远程计算机上的 nanopb 兼容。

这个问题让我参与其中,但我的问题与 JSON 无关。

0 投票
0 回答
1587 浏览

protocol-buffers - 未找到 Protoc 导入或有错误

我有两个简单的 .proto 文件。一个对另一个有进口。启动命令时;协议 --java_out = 'exit path' -I 'path root' 'path .proto with import'。它向我抛出以下错误:未找到导入“path proto2.proto”或有错误。在导入中,我有绝对路径我的两个文件。proto1.proto:

proto2.proto:

返回此错误;

/home//mysuser/insProtoc/proto2.proto:找不到文件。/--proto_path/ejemlo1.proto:导入“/home/muyuser/insProtoc/proto2.proto”未找到或有错误。/--proto_path/proto1.proto:6:12:“结果”未定义。

0 投票
0 回答
204 浏览

protocol-buffers - 地图的反射 API

我想使用反射 api 为 protobuf 消息设置类型映射的字段的值。

我尝试使用如下所示的设置字段方法。这似乎不起作用。我可以使用Filling up a map field in Proto using reflection API 中的建议使其工作。但这似乎不是一个好的解决方案!

我收到错误消息,

当我查看实现时,这是可以理解的。但是我还能如何设置地图?

0 投票
0 回答
61 浏览

java - Android GRPC Protobuf 未正确构建/链接

我在我的项目中使用 gradle java 中的 protobufs,但在解析下面的 proto 时遇到问题 https://github.com/lightningnetwork/lnd/blob/master/lnrpc/rpc.proto

它似乎没有正确构建,我的所有课程都没有找到

如果我用“//”注释掉它下面的行,但不知道为什么?

我没有收到任何构建错误,只是在导入期间没有找到 lnrpc.Rpc 错误

这是示例项目 https://github.com/mandelmonkey/protoTest

0 投票
1 回答
536 浏览

java - Google Cloud Speech to Text 错误:java.lang.NoSuchMethodError:没有虚拟方法 build()Lcom/google/protobuf/GeneratedMessageLite;

我正在使用 Google Cloud Speech 来发短信。出于某种原因,它只在第一次工作。之后,此错误不断出现。我被困住了。

java.lang.NoSuchMethodError: 没有虚拟方法 build()Lcom/google/protobuf/GeneratedMessageLite; 在 Lcom/google/cloud/speech/v1/RecognitionConfig$Builder 类中;或其超类(“com.google.cloud.speech.v1.RecognitionConfig$Builder”的声明

build.gradle 模块应用

0 投票
1 回答
2751 浏览

protocol-buffers - 如何从 grpc Context.current() 访问属性?

是否可以从 rpc 方法定义访问 grpc 调用的上下文属性?

我写了一个类似于这个的服务器拦截器

在服务实现中,我正在尝试类似的东西

每次值都为空。但是在 intellij 中调试时,我可以在 as 中看到这些context.current().keyValueEntries

如何访问上下文属性/正确的方法是什么?

0 投票
1 回答
1469 浏览

protocol-buffers - 有什么方法可以将 google protobuf 二进制文件(.pb 文件)反编译为 .proto 文件

当我反转 apk 时,我得到了 .pb 文件但没有 .proto 文件,有没有办法将此文件反编译为 .proto 文件,或者我可以从这个 .pb 文件生成 java 代码?

0 投票
1 回答
460 浏览

java - Netty 服务器发送一个由 Protobuf 编码的 byte[],但 C# 客户端 Socket.Receive 一直为 0

我正在尝试完成一个具有网络功能的 Unity 游戏演示,使用 C# 进行客户端编程,使用 Java 进行服务器编程。具体来说,服务器通信是由 Netty 实现的。我还引入了 Protobuf,它可以帮助我定义消息协议。由于我是服务器编程的新手,因此在我的代码中尚未考虑处理 TCP 中的数据包合并和丢失。

当我从客户端创建套接字并将消息发送到服务器时,一切顺利。服务器回复时出现问题:在客户端,异步方法已准备好接收消息。当我简单地从服务器发送一个字符串格式的消息时,该方法能够得到它。但是当我用一个 4 长度的字节 [] 替换消息时,它是从 Protobuf 消息对象编码的,客户端只是显示它没有收到任何内容。

当我打印我在服务器控制台中发送的内容时,它是这样的:00001000 00000001 00010000 00000001

我的服务器代码覆盖了 Netty 的 channelRead 和 channelReadComplete 函数。在 channelRead 中,调用 ChannelHandlerContext.write 将消息写入传输缓存。并且在channelReadComplete中调用了ChannelHandlerContext.flush,最终可以发送消息。

通道读取()

getState():包括 Protobuf 编码过程

通道读取完成()

客户端代码:

ReceiveAsync 以以下方式调用:

当我发现 clientSocket.Receive(result) 总是输出 0 时,我尝试像这样记录 result[0]、result[1]、result[2]、result[3]:

日志变成了 0,0,0,0。

对于“为什么客户端套接字什么也没收到”的任何想法以及解决方案,我将不胜感激。由于我来自亚洲,您的回复和我的回复可能会有时间差,而且英语不是我的母语。不过,我会尽量及时回复。非常感谢!