java Protocol Buffer - 使用给定的字段号和扩展注册表填充子消息

标签 java protocol-buffers

我一直在尝试使用java中的protobuf构造/填充子消息/消息。 更具体地说,我有分机的分机号码以及分机注册表。

有没有办法通过用给定值填充字段来构造消息?

在 C++ 中,我知道有一种方法可以通过使用反射来做到这一点。通过使用反射接口(interface),您可以获取字段描述符(FindKnownExtensionByNumber()),然后构造消息(MutableMessage(message,字段描述符))。

Java中有类似的方法吗?

最佳答案

开头为:

Message.Builder parent;
int extensionNumber;
ExtensionRegistry registry;

你可以这样做:

// Look up the extension.
ExtensionRegsitry.ExtensionInfo info =
    registry.findExtensionByNumber(
        parent.getDescriptorForType(), extensionNumber);
if (info == null) {
  throw new IllegalArgumentException("no such extension");
}

// Make a new builder for a message of the extension's type.
Message.Builder builder =
    info.defaultInstance.newBuilderForType();

// ... fill in builder however you want ...

// Insert the new sub-message into the parent.
parent.setField(info.descriptor, builder.build());

关于java Protocol Buffer - 使用给定的字段号和扩展注册表填充子消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967730/

相关文章:

java - Java中如何统计数据

java - Netbeans 对 corba 的支持

c# - 您如何在服务之间共享 gRPC 原型(prototype)定义

python - protobuf 的 HasField 函数需要哪些参数?

go - 指针和 protobuf 的无法解释的行为

c++ - 动态创建一个新的 protobuf 消息

java - 带有循环 Java 的数组

java - 获取 SQLServerException makeFromDriverError 消息 'could not prepare statement' 和 'The connection is closed'

Java,Glassfish JPA : NoClassDefFoundError: javax/persistence/spi/PersistenceUnitInfo (JDK6/7 only)

asp.net-core - Google.Protobuf 不允许属性为空