diff --git a/extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/AvroStreamInputFormat.java b/extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/AvroStreamInputFormat.java index bf0cecfa321..181896df382 100644 --- a/extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/AvroStreamInputFormat.java +++ b/extensions-core/avro-extensions/src/main/java/org/apache/druid/data/input/avro/AvroStreamInputFormat.java @@ -25,6 +25,7 @@ import org.apache.druid.data.input.InputEntity; import org.apache.druid.data.input.InputEntityReader; import org.apache.druid.data.input.InputRowSchema; import org.apache.druid.data.input.impl.NestedInputFormat; +import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.parsers.JSONPathSpec; import javax.annotation.Nullable; @@ -48,6 +49,9 @@ public class AvroStreamInputFormat extends NestedInputFormat ) { super(flattenSpec); + if (avroBytesDecoder == null) { + throw new IAE("avroBytesDecoder is required to decode Avro records"); + } this.avroBytesDecoder = avroBytesDecoder; this.binaryAsString = binaryAsString != null && binaryAsString; this.extractUnionsByType = extractUnionsByType != null && extractUnionsByType; diff --git a/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputFormatTest.java b/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputFormatTest.java index 6c6609301c8..9b7b4a001cc 100644 --- a/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputFormatTest.java +++ b/extensions-core/avro-extensions/src/test/java/org/apache/druid/data/input/AvroStreamInputFormatTest.java @@ -42,6 +42,7 @@ import org.apache.druid.data.input.impl.TimestampSpec; import org.apache.druid.data.input.schemarepo.Avro1124RESTRepositoryClientWrapper; import org.apache.druid.data.input.schemarepo.Avro1124SubjectAndIdConverter; import org.apache.druid.jackson.DefaultObjectMapper; +import org.apache.druid.java.util.common.IAE; import org.apache.druid.java.util.common.parsers.JSONPathFieldSpec; import org.apache.druid.java.util.common.parsers.JSONPathFieldType; import org.apache.druid.java.util.common.parsers.JSONPathSpec; @@ -202,6 +203,21 @@ public class AvroStreamInputFormatTest extends InitializedNullHandlingTest Assert.assertEquals(inputFormat, inputFormat2); } + @Test + public void testMissingAvroBytesDecoderRaisesIAE() + { + Assert.assertThrows( + "avroBytesDecoder is required to decode Avro records", + IAE.class, + () -> new AvroStreamInputFormat( + flattenSpec, + null, + true, + true + ) + ); + } + @Test public void testParse() throws SchemaValidationException, IOException {