我正在使用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类型。您将不得不手动编写和填充它,使用通用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插件执行此操作,请参见thedocumentation。请注意,"namespace" property确定
类的包层次结构。
现在您有了相应的Java类,现在有一个couple of different ways用来填充数据。