[ 
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)

Reply via email to