According to the documentation: https://avro.apache.org/docs/current/api/cpp/html/classavro_1_1GenericDatum.html#a879e7b725023bfd8246e15f07cb5bef0
avro::GenericDatum::GenericDatum ( const ValidSchema<https://avro.apache.org/docs/current/api/cpp/html/classavro_1_1ValidSchema.html> & schema ) Constructs a datum corresponding to the given avro type. The value will the appropraite default corresponding to the data type. Parameters: schema The schema that defines the avro type. A GenericDatum when given a valid schema should have all its field fill with reasonable default. But it seems it is failing for union schema. I have a written the following piece of code which I input the script with a schema and then try to encode it and save the result in a file: 14 avro::ValidSchema load(const char* filename) 15 { 16 std::ifstream ifs(filename); 17 avro::ValidSchema result; 18 avro::compileJsonSchema(ifs, result); 19 return result; 20 } 21 22 int 23 main(int argc, char ** argv) 24 { 25 avro::ValidSchema sch = load(argv[1]); // load a schema 26 27 avro::GenericDatum metaDatum( sch ); 28 std::auto_ptr<avro::OutputStream> out = avro::fileOutputStream( argv[2], 1 ); // write the result to a specified file 29 avro::EncoderPtr en = avro::jsonEncoder( sch ); 30 en->init ( *out ); 31 avro::encode ( *en, metaDatum ); 32 en->flush(); 33 34 return 0; 35 } Case and point: [pnip =>avro_rhel6<= my_avro]$ cat union.schema [ "bytes", "long”] [pnip =>avro_rhel6<= my_avro]$ ./schemaTest union.schema /tmp/result terminate called after throwing an instance of 'avro::Exception' what(): Not that many names Aborted It seems to work on other schema types (have not check all yet) but failed on union type schema