Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-1674

Optional field does not work in avro-cpp

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 1.7.7
    • None
    • c++
    • None

    Description

      I have to implement an optional field in my avro schema and when i test this one with avro-py that works and that does not works with avro-cpp.

      That is my schema (cpx.json) :

      {
        "type" : "record",
        "name" : "example",
        "fields" : [
          {
            "name": "city",
            "type": ["null", "string"],
            "defaults":null
          }
        ]
      }
      

      That is my cpp code:

      typedef std::pair<avro::ValidSchema, avro::GenericDatum> Pair;
      
      int main(int ac, char **av)
      {
      
          std::ifstream ifs("cpx.json");
          avro::ValidSchema schema;
          avro::compileJsonSchema(ifs, schema);
      
          Pair p(schema, avro::GenericDatum());
      
          avro::GenericDatum &Data = p.second;
          Data = avro::GenericDatum(schema);
          avro::GenericRecord &sReord = Data.value<avro::GenericRecord>();
          sReord.setFieldAt(sReord.fieldIndex("city"), avro::GenericDatum("test"));
          avro::DataFileWriter<Pair> dataFileWriter("test.bin", schema);
          dataFileWriter.write(p);
          dataFileWriter.close();
      }
      

      This is my error when i transform my binary to json with avo-tools :

      Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
      at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:402)
      at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
      at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
      at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
      at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
      at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
      at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
      at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
      at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
      at org.apache.avro.file.DataFileStream.next(DataFileStream.java:233)
      at org.apache.avro.file.DataFileStream.next(DataFileStream.java:220)
      at org.apache.avro.tool.DataFileReadTool.run(DataFileReadTool.java:77)
      at org.apache.avro.tool.Main.run(Main.java:84)
      at org.apache.avro.tool.Main.main(Main.java:73)

      Attachments

        Activity

          People

            Unassigned Unassigned
            sanchez Charlie Quillard
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: