confluentinc / libserdes

Avro Serialization/Deserialization C/C++ library with Confluent schema-registry support
Apache License 2.0
5 stars 64 forks source link

avro::decode not able to handle NULL array. Thows "Incorrect token in the stream. Expected: Array start, found Null" #49

Open bhuvanracham opened 2 years ago

bhuvanracham commented 2 years ago

The serdes CPP code is not able to handle NULL arrays when converting json to avro.

sample excerpt of input json that fails: ,"list1":[{"test1", "test2"}],"list2":null,"listItemCount":0,.........

It bails out at "avro::decode(json_decoder, datum);" while handling list2. How can we make decode accept null values which could be valid in some cases. Same question applies to a record that could be null too. Thanks.

static int Json2Avro(Serdes::Schema *schema, const std::string &json, avro::GenericDatum *datump) { avro::ValidSchema avro_schema = schema->object();

std::istringstream iss(json);
auto json_is = avro::istreamInputStream(iss);
avro::DecoderPtr json_decoder = avro::jsonDecoder(*avro_schema);
avro::GenericDatum *datum = new avro::GenericDatum(*avro_schema);

try {
    json_decoder->init(*json_is);
    avro::decode(*json_decoder, *datum);
}
catch (const avro::Exception &ex) {
    cerr << "JSON to avro transformation failed: " << ex.what() << endl;
    return -1;
}

*datump = datum;

return 0;

}