NPE created AVRO-1915:
-------------------------
Summary: 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)