Создание схемы Avro из определенного объекта Java

Apache Avro обеспечивает компактный, быстрый, двоичный формат данных, богатую структуру данных для сериализации. Однако он требует, чтобы пользователь определил схему (в JSON) для объекта, который должен быть сериализован.

в некоторых случаях это невозможно (e.g: класс этого объекта Java имеет некоторые члены, типы которых являются внешними классами java во внешних библиотеках). Следовательно, мне интересно, что есть инструмент, который может получить информацию от объекта .class file и создайте схему Avro для этого объект (например, Gson использует объект .сведения о классе для преобразования определенного объекта в строку JSON).

2 ответов


посмотри API отражения Java.

получение схемы выглядит так:

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

посмотреть пример от дуга на другой вопрос для рабочего примера.

кредиты этого ответа принадлежат Шону Басби.


вот как создайте схему Avro из определения POJO

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);