java - 以编程方式从模式中获取类 (Apache avro)

标签 java apache serialization avro

我正在使用 Apache Avro .

我在我的 java 代码中定义了模式 json 字符串:

String schemaStr = STRING_IN_JSON_FORMAT;

//use Parser to parse above string to Schema object
Schema.Parser parser = new Schema.Parser(); 
Schema schema = parser.parse(schemaStr);
//How to programmatically get the class from the schema I got at this point?

如何继续我的代码以编程方式从架构中获取类?

最佳答案

Avro 不会在运行时生成 Java 类型。您要么必须手动编写和填充它,要么使用通用架构实例,要么使用 Avro 工具或 Avro Maven 插件将架构定义编译为 Java 类。您可能不想做第一个。

<强>1。使用通用架构表示

如果您只想创建一个记录,其中包含强制执行该架构的架构数据,您可以使用 GenericRecord:

GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`

如果您的架构中未定义 field1,这将抛出 AvroRuntimeException

<强>2。生成 Java 类

如果您有一个描述鱼的模式,并且您想要 有对应的Java com.example.Fish,需要自己编译 它来自您的架构。您可以使用 Avro 工具或 Avro Maven 插件执行此操作,请参阅 the documentation .请注意 "namespace" property决定 类的包层次结构。

现在您有了相应的 Java 类,还有一个 couple of different ways用数据填充它。

关于java - 以编程方式从模式中获取类 (Apache avro),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19513777/

相关文章:

apache - 在 puppetlabs-apache 中自定义默认虚拟主机

由于 PHP 版本,Apache 中的 PHPMyAdmin 500 内部服务器错误

java - 将其用于多个文本时加速 OpenNLP POS 标记

php - 如何在 MySQL 中更新序列化数据

windows - 无法在 Windows 7 64 位中正确设置 java 的路径

java - Maven找不到本地安装的原型(prototype)

php - 当最终用户访问同时被覆盖的 PHP 文件时会发生什么?

c++ - 保存应用程序设置 MFC CArchive 方式

java - Setter 无法正确修改字段

java - 获取 "success"而没有收到任何 GCM 消息