2013-10-22 28 views
1

我正在使用Apache Avro以編程方式從架構中獲取類(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? 

如何繼續我的代碼來從架構編程方式獲取類?

回答

2

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 Tools或Avro Maven插件執行此操作,請參閱the documentation。請注意,"namespace" property決定了該類的包層次結構 。

既然你有相應的Java類,那麼有一個couple of different ways來填充數據。