Java 以编程方式从模式获取类(ApacheAvro)
我正在使用 我在java代码中定义了模式json字符串:Java 以编程方式从模式获取类(ApacheAvro),java,apache,serialization,avro,Java,Apache,Serialization,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
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。使用通用模式表示法 如果您只想创建一个包含强制架构的架构数据的记录,可以使用
genericord
:
GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`
如果架构中未定义字段1,则会抛出一个AvroRuntimeException
2。生成Java类
如果您有一个描述鱼的模式,并且希望
如果有一个对应的Java com.example.Fish,则需要编译
它将从您的模式中删除。您可以使用Avro工具或Avro Maven插件来完成此操作,请参阅。请注意
类的包层次结构
现在您已经有了相应的Java类,现在有了一个方法来用数据填充它