我正在使用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?
如何继续我的代码以编程方式从架构中获取类?
答案 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用数据填充它。