From cfe6520283b6b03c28a7b1704d9d56d1e6cb67ee Mon Sep 17 00:00:00 2001 From: Joscha Feth Date: Fri, 4 Oct 2024 05:56:11 +0100 Subject: [PATCH] fix(avro-schema): fix NPE for `null` enum values (#19771) --- .../openapitools/codegen/DefaultCodegen.java | 2 +- .../codegen/languages/AvroSchemaCodegen.java | 7 +++-- .../3_0/avro-schema/valid-enums.yaml | 14 +++++++++- .../valid-enums/avro-schema-enum/Sample.avsc | 26 +++++++++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 56e5debcdcb..5206c18682d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -6648,7 +6648,7 @@ public class DefaultCodegen implements CodegenConfig { for (Object value : values) { if (value == null) { // raw null values in enums are unions for nullable - // atttributes, not actual enum values, so we remove them here + // attributes, not actual enum values, so we remove them here continue; } Map enumVar = new HashMap<>(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java index 81fa8c13530..2d01cfd9f21 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AvroSchemaCodegen.java @@ -199,8 +199,11 @@ public class AvroSchemaCodegen extends DefaultCodegen implements CodegenConfig { @Override protected List> buildEnumVars(List values, String dataType) { - List sanitizedValues = values.stream().map(Object::toString).map(this::sanitizeEnumValue) - .collect(Collectors.toList()); + List sanitizedValues = values.stream() + .filter(x -> x != null) + .map(Object::toString) + .map(this::sanitizeEnumValue) + .collect(Collectors.toList()); removeEnumValueCollisions(sanitizedValues); return super.buildEnumVars(sanitizedValues, dataType); } diff --git a/modules/openapi-generator/src/test/resources/3_0/avro-schema/valid-enums.yaml b/modules/openapi-generator/src/test/resources/3_0/avro-schema/valid-enums.yaml index d1ebb181647..f76ea0584b0 100644 --- a/modules/openapi-generator/src/test/resources/3_0/avro-schema/valid-enums.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/avro-schema/valid-enums.yaml @@ -27,4 +27,16 @@ components: # The next two is to make sure collisions are resolved properly - 'coll-ision' - 'coll_ision' - type: 'string' \ No newline at end of file + type: 'string' + another: + enum: + - 'x' + - 'y' + - null + type: 'string' + equivalent: + enum: + - 'x' + - 'y' + type: 'string' + nullable: true \ No newline at end of file diff --git a/samples/openapi3/schema/valid-enums/avro-schema-enum/Sample.avsc b/samples/openapi3/schema/valid-enums/avro-schema-enum/Sample.avsc index 23281b4a7dd..40c12272516 100644 --- a/samples/openapi3/schema/valid-enums/avro-schema-enum/Sample.avsc +++ b/samples/openapi3/schema/valid-enums/avro-schema-enum/Sample.avsc @@ -20,6 +20,32 @@ }], "doc": "", "default": null + }, + { + "name": "another", + "type": ["null", { + "type": "enum", + "name": "Sample_another", + "symbols": [ + "x", + "y" + ] + }], + "doc": "", + "default": null + }, + { + "name": "equivalent", + "type": ["null", { + "type": "enum", + "name": "Sample_equivalent", + "symbols": [ + "x", + "y" + ] + }], + "doc": "", + "default": null } ]