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)