从某个 Java 对象生成 Avro Schema

2022-09-01 09:45:25

Apache Avro提供了一种紧凑,快速,二进制的数据格式,丰富的数据结构用于序列化。但是,它要求用户为需要序列化的对象定义架构(在 JSON 中)。

在某些情况下,这是不可能的(例如:该Java对象的类具有一些成员,其类型是外部库中的外部java类)。因此,我想知道有一个工具可以从对象的.class文件中获取信息,并为该对象生成Avro模式(如Gson使用对象的.class信息将某个对象转换为JSON字符串)。


答案 1

看看 Java 反射 API

获取架构如下所示:

Schema schema = ReflectData.get().getSchema(T);

有关工作示例,请参阅 Doug 在另一个问题中的示例

这个答案的功劳属于肖恩·巴斯比。


答案 2

下面介绍如何从 POJO 定义生成 Avro 架构

ObjectMapper mapper = new ObjectMapper(new AvroFactory());
AvroSchemaGenerator gen = new AvroSchemaGenerator();
mapper.acceptJsonFormatVisitor(RootType.class, gen);
AvroSchema schemaWrapper = gen.getGeneratedSchema();
org.apache.avro.Schema avroSchema = schemaWrapper.getAvroSchema();
String asJson = avroSchema.toString(true);