以编程方式从模式获取类 (Apache avro)

Lee*_*fin 4 java apache serialization avro

我正在使用Apache Avro

我在 java 代码中定义了 schema 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?
Run Code Online (Sandbox Code Playgroud)

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

Ale*_* A. 5

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

1.使用通用的Schema表示

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

GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`
Run Code Online (Sandbox Code Playgroud)

AvroRuntimeException如果您的模式中未定义 field1,这将抛出一个错误。

2. 生成Java类

如果您有一个描述 Fish 的模式,并且您希望有一个相应的 Java com.example.Fish,则需要从您的模式编译它。您可以使用 Avro Tools 或 Avro Maven 插件来执行此操作,请参阅文档。请注意,“命名空间”属性决定了类的包层次结构。

现在您已经有了相应的 Java 类,有几种不同的方法可以用数据填充它。