Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式从模式获取类(ApacheAvro)_Java_Apache_Serialization_Avro - Fatal编程技术网

Java 以编程方式从模式获取类(ApacheAvro)

Java 以编程方式从模式获取类(ApacheAvro),java,apache,serialization,avro,Java,Apache,Serialization,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

我正在使用

我在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。使用通用模式表示法

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

GenericRecord datum = new GenericData.Record(schema);
datum.put("field1", fieldValue)`
如果架构中未定义字段1,则会抛出一个
AvroRuntimeException

2。生成Java类

如果您有一个描述鱼的模式,并且希望 如果有一个对应的Java com.example.Fish,则需要编译 它将从您的模式中删除。您可以使用Avro工具或Avro Maven插件来完成此操作,请参阅。请注意 类的包层次结构

现在您已经有了相应的Java类,现在有了一个方法来用数据填充它