我正在使用 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 类型。您要么必须手动编写和填充它,要么使用通用架构实例,要么使用 Avro 工具或 Avro Maven 插件将架构定义编译为 Java 类。您可能不想做第一个。
<强>1。使用通用架构表示
如果您只想创建一个记录,其中包含强制执行该架构的架构数据,您可以使用 GenericRecord
:
GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`
如果您的架构中未定义 field1,这将抛出 AvroRuntimeException
。
<强>2。生成 Java 类
如果您有一个描述鱼的模式,并且您想要 有对应的Java com.example.Fish,需要自己编译 它来自您的架构。您可以使用 Avro 工具或 Avro Maven 插件执行此操作,请参阅 the documentation .请注意 "namespace" property决定 类的包层次结构。
现在您有了相应的 Java 类,还有一个 couple of different ways用数据填充它。
关于java - 以编程方式从模式中获取类 (Apache avro),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19513777/