diff --git a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java index 0098d8da5e0..ebbac9a3228 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java +++ b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java @@ -185,6 +185,9 @@ public Conversion getConversionByClass(Class datumClass) { */ @SuppressWarnings("unchecked") public Conversion getConversionByClass(Class datumClass, LogicalType logicalType) { + if (logicalType == null) { + return null; + } Map> conversions = conversionsByClass.get(datumClass); if (conversions != null) { return (Conversion) conversions.get(logicalType.getName()); diff --git a/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java b/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java index 40d9ad6decb..a8e6f8e41ab 100644 --- a/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java +++ b/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java @@ -39,9 +39,16 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.lessThan; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; public class TestReflectData { + @Test + void getConversionByClassWithNullLogicalTypeReturnsNull() { + // BigDecimal has a conversion registered by default but a null logicalType + assertNull(ReflectData.get().getConversionByClass(java.math.BigDecimal.class, null)); + } + @Test @SuppressWarnings("unchecked") void weakSchemaCaching() throws Exception {