Hello, I have problem with serialization of data having optional fields.
When I pass null in corresponding field it works but when it is non-null
then serialization fails.
Schema:
{
"type": "record",
"name": "schema",
"namespace": "space",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "data",
"type": [
"null",
"string"
],
"defaults": null
},
{
"name": "timestamp",
"type": "long"
}
]
}
Data that works:
{"username":"miguno","data":null,"timestamp": 1366150681 }
Data that fails:
{"username":"miguno","data":"test","timestamp": 1366150681 }
Should it work or I have some error in my schema? I didn't find any active
issues in jira so I guess the concept of optional fields should work just
fine, also in C++.
The code is:
std::unique_ptr<avro::InputStream> in = avro::memoryInputStream((const
uint8_t*)&json[0], json.size()); // json is incoming data
avro::ValidSchema validSchema;
std::istringstream ins(schema); // schema is avro-schema
try {
avro::compileJsonSchema(ins, validSchema);
}
catch (const std::exception& e1) {
std::string errstr = e1.what();
}
avro::DecoderPtr jd = avro::jsonDecoder(validSchema);
avro::GenericDatum datum(validSchema);
jd->init(*in);
avro::decode(*jd, datum); //serialization with non-null data fails
somewhere inside this step