From bba71b7f83219cb09e6db9086203f1e3cb98fd5d Mon Sep 17 00:00:00 2001 From: Ewa Ostrowska Date: Thu, 7 Aug 2025 11:52:11 +0200 Subject: [PATCH] fix: Fix missing items on nested @ArraySchema items in OAS 3.1 Resolves #4944 #4836 --- .../v3/core/util/AnnotationsUtils.java | 2 +- .../resolving/v31/ModelResolverOAS31Test.java | 20 +++++++++++++++ .../core/resolving/v31/model/CreditCard.java | 25 +++++++++++++++++++ .../v3/core/resolving/v31/model/Currency.java | 14 +++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Currency.java diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 761bc1b7f7..43649f541c 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -548,7 +548,7 @@ public static Optional getArraySchema(io.swagger.v3.oas.annotations.medi if (arraySchema.schema() != null) { if (arraySchema.schema().implementation().equals(Void.class)) { - getSchemaFromAnnotation(arraySchema.schema(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setItems); + getSchemaFromAnnotation(arraySchema.schema(), components, jsonViewAnnotation, openapi31, arraySchemaObject.getItems()).ifPresent(arraySchemaObject::setItems); } else if (processSchemaImplementation) { getSchema(arraySchema.schema(), arraySchema, false, arraySchema.schema().implementation(), components, jsonViewAnnotation, openapi31).ifPresent(arraySchemaObject::setItems); } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java index 542cb87007..512428ebb6 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/ModelResolverOAS31Test.java @@ -85,6 +85,26 @@ public void testOAS31Fields() { " properties:\n" + " billingAddress:\n" + " type: string\n" + + " acceptingCountries:\n" + + " type: array\n" + + " items:\n" + + " type: string\n" + + " description: accepting country\n" + + " enum:\n" + + " - UNITED_STATES_OF_AMERICA\n" + + " - CANADA\n" + + " uniqueItems: true\n" + + " availableCurrencies:\n" + + " type: array\n" + + " items:\n" + + " $ref: \"#/components/schemas/Currency\"\n" + + " description: available currencies\n" + + " uniqueItems: true\n" + + "Currency:\n" + + " type: object\n" + + " properties:\n" + + " currencyCode:\n" + + " type: string\n" + "ModelWithOAS31Stuff:\n" + " type: object\n" + " $comment: Random comment at schema level\n" + diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java index fc8d4c900c..7a66fb13fe 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/CreditCard.java @@ -1,8 +1,15 @@ package io.swagger.v3.core.resolving.v31.model; +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.Set; + public class CreditCard { private String billingAddress; + private Set acceptingCountries; + private Set availableCurrencies; public String getBillingAddress() { return billingAddress; @@ -11,4 +18,22 @@ public String getBillingAddress() { public void setBillingAddress(String billingAddress) { this.billingAddress = billingAddress; } + + @ArraySchema(schema = @Schema(description = "accepting country")) + public Set getAcceptingCountries() { + return acceptingCountries; + } + + public void setAcceptingCountries(Set acceptingCountries) { + this.acceptingCountries = acceptingCountries; + } + + @ArraySchema(schema = @Schema(description = "available currencies")) + public Set getAvailableCurrencies() { + return availableCurrencies; + } + + public void setAvailableCurrencies(Set availableCurrencies) { + this.availableCurrencies = availableCurrencies; + } } diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Currency.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Currency.java new file mode 100644 index 0000000000..b13e5adbf5 --- /dev/null +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/v31/model/Currency.java @@ -0,0 +1,14 @@ +package io.swagger.v3.core.resolving.v31.model; + +public class Currency { + + private String currencyCode; + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } +} \ No newline at end of file