From b8711066e224d5d6f473260a5fc01c8a85cef50c 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 23c1b3536..e5abfafc3 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 @@ -268,27 +268,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