From bccd7ed1f1dfaf17528806a71df115c12dddb275 Mon Sep 17 00:00:00 2001 From: Michal Foksa Date: Sat, 14 Jun 2025 15:10:28 +0200 Subject: [PATCH 1/2] [AVRO] Make RecordVisitor _avroSchema and _fields properties final. --- .../dataformat/avro/schema/RecordVisitor.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java index a28cebc37..8c5dcc2ef 100644 --- a/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java +++ b/avro/src/main/java/com/fasterxml/jackson/dataformat/avro/schema/RecordVisitor.java @@ -62,11 +62,9 @@ public class RecordVisitor */ private final Schema _typeSchema; - // !!! 19-May-2025: TODO: make final in 2.20 - protected Schema _avroSchema; + protected final Schema _avroSchema; - // !!! 19-May-2025: TODO: make final in 2.20 - protected List _fields = new ArrayList<>(); + protected final List _fields = new ArrayList<>(); public RecordVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperImpl visitorWrapper) { @@ -82,12 +80,11 @@ public RecordVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperIm _typeSchema = null; } else { // If Avro schema for this _type results in UNION I want to know Avro type where to assign fields - _avroSchema = AvroSchemaHelper.initializeRecordSchema(bean); - _typeSchema = _avroSchema; + _typeSchema = AvroSchemaHelper.initializeRecordSchema(bean); _overridden = false; AvroMeta meta = bean.getClassInfo().getAnnotation(AvroMeta.class); if (meta != null) { - _avroSchema.addProp(meta.key(), meta.value()); + _typeSchema.addProp(meta.key(), meta.value()); } List subTypes = getProvider().getAnnotationIntrospector().findSubtypes(bean.getClassInfo()); @@ -126,10 +123,12 @@ public RecordVisitor(SerializerProvider p, JavaType type, VisitorFormatWrapperIm unionSchemas.add(subTypeSchema); } } - _avroSchema = Schema.createUnion(new ArrayList<>(unionSchemas)); } catch (JsonMappingException jme) { throw new RuntimeJsonMappingException("Failed to build schema", jme); } + _avroSchema = Schema.createUnion(new ArrayList<>(unionSchemas)); + } else { + _avroSchema = _typeSchema; } } _visitorWrapper.getSchemas().addSchema(type, _avroSchema); From 095f987dfef60d7bd22b7911562236d76b2362ce Mon Sep 17 00:00:00 2001 From: Michal Foksa Date: Sat, 14 Jun 2025 15:45:00 +0200 Subject: [PATCH 2/2] Some of my System.out.println() removed --- .../dataformat/avro/BigDecimal_schemaCreationTest.java | 6 ------ .../jsr310/AvroJavaTimeModule_schemaCreationTest.java | 2 -- .../schema/DateTimeVisitor_builtAvroSchemaTest.java | 2 -- .../avro/schema/Enum_schemaCreationTest.java | 4 ---- .../avro/schema/PolymorphicTypeAnnotationsTest.java | 10 ---------- 5 files changed, 24 deletions(-) diff --git a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/BigDecimal_schemaCreationTest.java b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/BigDecimal_schemaCreationTest.java index ce331198a..79e8f1f64 100644 --- a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/BigDecimal_schemaCreationTest.java +++ b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/BigDecimal_schemaCreationTest.java @@ -39,8 +39,6 @@ public void testSchemaCreation_withLogicalTypesDisabled_onBigDecimalWithAvroDeci // because logical types are disabled by default. final Schema actualSchema = gen.getGeneratedSchema().getAvroSchema(); - System.out.println(BigDecimalWithAvroDecimalAnnotationWrapper.class.getSimpleName() + " schema:" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getField("bigDecimalValue")).isNotNull(); Schema bigDecimalValue = actualSchema.getField("bigDecimalValue").schema(); @@ -59,8 +57,6 @@ public void testSchemaCreation_withLogicalTypesEnabled_onBigDecimalWithAvroDecim MAPPER.acceptJsonFormatVisitor(BigDecimalWithAvroDecimalAnnotationWrapper.class, gen); final Schema actualSchema = gen.getGeneratedSchema().getAvroSchema(); - System.out.println(BigDecimalWithAvroDecimalAnnotationWrapper.class.getSimpleName() + " schema:" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getField("bigDecimalValue")).isNotNull(); Schema bigDecimalValue = actualSchema.getField("bigDecimalValue").schema(); @@ -90,8 +86,6 @@ public void testSchemaCreation_withLogicalTypesEnabled_onBigDecimalWithAvroDecim MAPPER.acceptJsonFormatVisitor(BigDecimalWithAvroDecimalAnnotationToFixedWrapper.class, gen); final Schema actualSchema = gen.getGeneratedSchema().getAvroSchema(); - System.out.println(BigDecimalWithAvroDecimalAnnotationToFixedWrapper.class.getSimpleName() + " schema:" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getField("bigDecimalValue")).isNotNull(); diff --git a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/jsr310/AvroJavaTimeModule_schemaCreationTest.java b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/jsr310/AvroJavaTimeModule_schemaCreationTest.java index 5d6a17cb0..5defcdca3 100644 --- a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/jsr310/AvroJavaTimeModule_schemaCreationTest.java +++ b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/jsr310/AvroJavaTimeModule_schemaCreationTest.java @@ -47,8 +47,6 @@ public void testSchemaCreation(Class testClass, mapper.acceptJsonFormatVisitor(testClass, gen); Schema actualSchema = gen.getGeneratedSchema().getAvroSchema(); -// System.out.println(testClass.getName() + " schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(expectedType); assertThat(actualSchema.getProp(LogicalType.LOGICAL_TYPE_PROP)).isEqualTo(expectedLogicalType); diff --git a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/DateTimeVisitor_builtAvroSchemaTest.java b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/DateTimeVisitor_builtAvroSchemaTest.java index 058b1b4dc..a3f4ca9c5 100644 --- a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/DateTimeVisitor_builtAvroSchemaTest.java +++ b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/DateTimeVisitor_builtAvroSchemaTest.java @@ -68,8 +68,6 @@ public void builtAvroSchemaTest(Class testClass, // WHEN Schema actualSchema = dateTimeVisitor.builtAvroSchema(); -// System.out.println(testClass.getName() + " schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(expectedAvroType); assertThat(actualSchema.getProp(LogicalType.LOGICAL_TYPE_PROP)).isEqualTo(expectedLogicalType); diff --git a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/Enum_schemaCreationTest.java b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/Enum_schemaCreationTest.java index 83550dba2..5bd36c03a 100644 --- a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/Enum_schemaCreationTest.java +++ b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/Enum_schemaCreationTest.java @@ -27,8 +27,6 @@ public void testJavaEnumToAvroEnum_test() throws JsonMappingException { MAPPER.acceptJsonFormatVisitor(NumbersEnum.class , gen); Schema actualSchema = gen.getGeneratedSchema().getAvroSchema(); - System.out.println("schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo( Schema.Type.ENUM); assertThat(actualSchema.getEnumSymbols()).containsExactlyInAnyOrder("ONE", "TWO", "THREE"); @@ -44,8 +42,6 @@ public void testJavaEnumToAvroString_test() throws JsonMappingException { MAPPER.acceptJsonFormatVisitor(NumbersEnum.class , gen); Schema actualSchema = gen.getGeneratedSchema().getAvroSchema(); - System.out.println("schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo( Schema.Type.STRING); diff --git a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/PolymorphicTypeAnnotationsTest.java b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/PolymorphicTypeAnnotationsTest.java index f21675478..ea3a97c7c 100644 --- a/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/PolymorphicTypeAnnotationsTest.java +++ b/avro/src/test/java/com/fasterxml/jackson/dataformat/avro/schema/PolymorphicTypeAnnotationsTest.java @@ -45,8 +45,6 @@ public void subclasses_of_interface_test() throws Exception { // WHEN Schema actualSchema = MAPPER.schemaFor(AnimalInterface.class).getAvroSchema(); - // System.out.println("Animal schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(Schema.Type.UNION); // Because AnimalInterface is interface and AbstractMammal is abstract, they are not expected to be among types in union @@ -82,8 +80,6 @@ public void jsonSubTypes_on_concrete_class_test() throws Exception { // WHEN Schema actualSchema = MAPPER.schemaFor(Fruit.class).getAvroSchema(); - // System.out.println("Fruit schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(Schema.Type.UNION); assertThat(actualSchema.getTypes()).containsExactlyInAnyOrder(fruitItselfSchema, appleSchema, pearSchema); @@ -142,8 +138,6 @@ public void jsonSubTypes_of_jsonSubTypes_test() throws Exception { // WHEN Schema actualSchema = MAPPER.schemaFor(Vehicle.class).getAvroSchema(); - // System.out.println("Vehicle schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(Schema.Type.UNION); assertThat(actualSchema.getTypes()).containsExactlyInAnyOrder( @@ -187,8 +181,6 @@ public void class_is_referenced_twice_in_hierarchy_test() throws Exception { // WHEN Schema actualSchema = MAPPER.schemaFor(ElementInterface.class).getAvroSchema(); - // System.out.println("ElementInterface schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(Schema.Type.UNION); // ElementInterface and AbstractGas are not concrete classes they are not expected to be among types in union @@ -223,8 +215,6 @@ public void base_class_explicitly_in_JsonSubTypes_annotation_test() throws Excep // WHEN Schema actualSchema = MAPPER.schemaFor(Image.class).getAvroSchema(); - // System.out.println("Image schema:\n" + actualSchema.toString(true)); - // THEN assertThat(actualSchema.getType()).isEqualTo(Schema.Type.UNION); assertThat(actualSchema.getTypes()).containsExactlyInAnyOrder(imageItselfSchema, jpegSchema, pngSchema);