2

我正在使用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?

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

4

1 回答 1

3

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

1.使用通用的Schema表示

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

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

这将抛出一个AvroRuntimeExceptionif field1 未在您的架构中定义。

2.生成Java类

如果您有一个描述 Fish 的模式,并且希望有一个对应的 Java com.example.Fish,则需要从您的模式编译它。您可以使用 Avro 工具或 Avro Maven 插件来执行此操作,请参阅文档。请注意,“命名空间”属性决定了类的包层次结构。

现在您已经有了相应的 Java 类,有几种不同的方法可以用数据填充它。

于 2013-10-23T01:07:12.840 回答