以编程方式从架构中获取类(Apache avro)

时间:2013-10-22 09:19:05

标签: 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?

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

如果架构中未定义field1,则会抛出AvroRuntimeException

<强> 2。生成Java类

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

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