Prateek Kohli created AVRO-2184:
-----------------------------------

             Summary: Unable to decode JSON data file if a property is renamed 
in reader schema
                 Key: AVRO-2184
                 URL: https://issues.apache.org/jira/browse/AVRO-2184
             Project: Avro
          Issue Type: Bug
            Reporter: Prateek Kohli


I am unable to decode JSON data file if a property is renamed in reader schema:

As per the documentation it is a compatible change.

Also, Datatype promotion is not being supported, if I try to change the 
datatype of favourite_number field in the writer's schema, decoding fails.

All of the above scenarios are supported if I use Binary decoding instead of 
JSON.

*Writer Schema :*

{"namespace": "example.avro",
 "type": "record",
 "name": "User",
 "fields": [
 \{"name": "name", "type": "string"},
 \{"name": "favorite_number", "type": ["int", "null"]},
 \{"name": "favorite_color", "type": ["string", "null"]}
 ]}

 

*Reader Schema :* 

{"namespace": "example.avro",
 "type": "record",
 "name": "User",
 "fields": [
 \{"name": "fname", "type": "string", "aliases" : [ "name" ]},
 \{"name": "favorite_number", "type": ["int", "null"]},
 \{"name": "favorite_color", "type": ["string", "null"]}
 ]}

 

*I have written the below code to decode JSON data:*

FileInputStream fin = new FileInputStream(file);
 byte fileContent[] = new byte[(int)file.length()];
 fin.read(fileContent);

 InputStream input = new ByteArrayInputStream(fileContent);
 DataInputStream din = new DataInputStream(input);
 
 while (true) {
 try {
         Decoder decoder = DecoderFactory.get().jsonDecoder(schema, din);
         ResolvingDecoder resolvingDecoder = 
DecoderFactory.get().resolvingDecoder(writer,                             
reader, decoder);
         Object datum = datumReader.read(null, resolvingDecoder);
         System.out.println(datum);
     } catch (EOFException eofException) {
          break;
       }
 }

*Below is the Exception I get :*

Exception in thread "main" org.apache.avro.AvroTypeException: Found 
example.avro.User, expecting example.avro.User, missing required field fname
 at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:292)
 at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
 at org.apache.avro.io.ResolvingDecoder.readString(ResolvingDecoder.java:196)
 at org.apache.avro.io.ResolvingDecoder.readString(ResolvingDecoder.java:201)
 at 
org.apache.avro.generic.GenericDatumReader.readString(GenericDatumReader.java:422)
 at 
org.apache.avro.generic.GenericDatumReader.readString(GenericDatumReader.java:414)
 at 
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:181)
 at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
 at 
org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:232)
 at 
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:222)
 at 
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:175)
 at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
 at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:145)
 at 
com.ericsson.avroTest.avroCheck.WithoutCodeTest.main(WithoutCodeTest.java:134)

 

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to