【问题标题】:Get class from schema programmatically (Apache avro)以编程方式从模式中获取类(Apache avro)
【发布时间】:2013-10-22 09:19:04
【问题描述】:

我正在使用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?

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

【问题讨论】:

    标签: java apache serialization avro


    【解决方案1】:

    Avro 不会在运行时生成 Java 类型。您必须手动编写和填充它,使用通用 Schema 实例或使用 Avro Tools 或 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 可以用数据填充它。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多