From e319fe8c0257d1af22eae26e1830e1052869f199 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 2 Apr 2018 13:16:11 -0400 Subject: [PATCH] GH-1294 Fixed NPE in AvroSchemaRegistryClientMessageConverter The NPE was a result of not following defensive programming practices and that is fixed. Also, we already support both reader and writer schema being null where new ReflectDatumReader(type) is used in getDatumReader(..) operation. That said there may still be conditions which are not supported and that is okay since in the end it's a MessageConverter and as such it is one of the extension points of the framework allowing user to provide a custom one follwing instructions in 'User-defined Message Converters' of the reference guide. Resolves #1294 --- ...oSchemaRegistryClientMessageConverter.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AvroSchemaRegistryClientMessageConverter.java b/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AvroSchemaRegistryClientMessageConverter.java index 27128453f..7c6722478 100644 --- a/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AvroSchemaRegistryClientMessageConverter.java +++ b/spring-cloud-stream-schema/src/main/java/org/springframework/cloud/stream/schema/avro/AvroSchemaRegistryClientMessageConverter.java @@ -276,27 +276,23 @@ public class AvroSchemaRegistryClientMessageConverter extends AbstractAvroMessag @Override protected Schema resolveWriterSchemaForDeserialization(MimeType mimeType) { if (this.readerSchema == null) { - Schema schema = null; - ParsedSchema parsedSchema = null; SchemaReference schemaReference = extractSchemaReference(mimeType); if (schemaReference != null) { - parsedSchema = cacheManager.getCache(REFERENCE_CACHE_NAME) - .get(schemaReference, ParsedSchema.class); + ParsedSchema parsedSchema = cacheManager.getCache(REFERENCE_CACHE_NAME).get(schemaReference, ParsedSchema.class); if (parsedSchema == null) { - String schemaContent = this.schemaRegistryClient - .fetch(schemaReference); - schema = new Schema.Parser().parse(schemaContent); - parsedSchema = new ParsedSchema(schema); - cacheManager.getCache(REFERENCE_CACHE_NAME) - .putIfAbsent(schemaReference, parsedSchema); + String schemaContent = this.schemaRegistryClient.fetch(schemaReference); + if (schemaContent != null) { + Schema schema = new Schema.Parser().parse(schemaContent); + parsedSchema = new ParsedSchema(schema); + cacheManager.getCache(REFERENCE_CACHE_NAME).putIfAbsent(schemaReference, parsedSchema); + } + } + if (parsedSchema != null) { + return parsedSchema.getSchema(); } - } - return parsedSchema.getSchema(); - } - else { - return this.readerSchema; } + return this.readerSchema; } @Override