[ https://issues.apache.org/jira/browse/AVRO-1915?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15506905#comment-15506905 ]
NPE commented on AVRO-1915: --------------------------- Belated thanks, Ryan, this was very helpful in working to resolve our issue. > AvroTypeException decoding from earlier schema version > ------------------------------------------------------ > > Key: AVRO-1915 > URL: https://issues.apache.org/jira/browse/AVRO-1915 > Project: Avro > Issue Type: Bug > Components: java > Affects Versions: 1.7.7 > Reporter: NPE > > We have two services which communicate with one another by sending > JSON-encoded Avro-based messages over Kafka. We want to update the schema > for messages sent from service A to service B by adding an additional string > field with a default value of "" (empty string). We have tested by initially > adding the updated schema to service B (the reader) and continuing to send > messages in the older format from service A (the writer). > Simplified example of old schema (some fields omitted): > {code} > { > "type": "record", > "name": "Envelope", > "fields": [{ > "name": "appId", > "type": "string" > }, { > "name": "time", > "type": "long" > }, { > "name": "type", > "type": "string" > }, { > "name": "payload", > "type": [{ > "type": "record", > "name": "MessagePayload", > "fields": [{ > "name": "context", > "type": { > "type": "record", > "name": "PayloadContext", > "fields": [{ > "name": "source", > "type": "string" > }, { > "name": "requestId", > "type": "string" > }] > } > }, { > "name": "content", > "type": "string" > }, { > "name": "contentType", > "type": "string" > }] > }] > }] > } > {code} > Simplified example of new schema (some fields omitted): > {code} > { > "type": "record", > "name": "Envelope", > "fields": [{ > "name": "appId", > "type": "string" > }, { > "name": "time", > "type": "long" > }, { > "name": "type", > "type": "string" > }, { > "name": "payload", > "type": [{ > "type": "record", > "name": "MessagePayload", > "fields": [{ > "name": "context", > "type": { > "type": "record", > "name": "PayloadContext", > "fields": [{ > "name": "source", > "type": "string" > }, { > "name": "requestId", > "type": "string" > }, { > "name": "newField", > "type": "string", > "default": "" > }] > } > }, { > "name": "content", > "type": "string" > }, { > "name": "contentType", > "type": "string" > }] > }] > }] > } > {code} > Our understanding was that the reader, with the newer schema, should be able > to parse messages sent with the older given the default value for the missing > field; however, we are getting the following exception: > {code} > org.apache.avro.AvroTypeException: Expected string. Got END_OBJECT > {code} > Are we missing something here? -- This message was sent by Atlassian JIRA (v6.3.4#6332)