diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java index 7c00931b23..7869ee895e 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ModelResolver.java @@ -743,7 +743,7 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context propSchemaOrArray == null ? null : propSchemaOrArray instanceof io.swagger.v3.oas.annotations.media.ArraySchema ? - ((io.swagger.v3.oas.annotations.media.ArraySchema) propSchemaOrArray).schema() : + ((io.swagger.v3.oas.annotations.media.ArraySchema) propSchemaOrArray).arraySchema() : (io.swagger.v3.oas.annotations.media.Schema) propSchemaOrArray; io.swagger.v3.oas.annotations.media.Schema.AccessMode accessMode = resolveAccessMode(propDef, type, propResolvedSchemaAnnotation); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java index 7d2eea8c2b..4dea65bec3 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java @@ -83,6 +83,7 @@ import io.swagger.v3.jaxrs2.resources.Ticket3731BisResource; import io.swagger.v3.jaxrs2.resources.Ticket3731Resource; import io.swagger.v3.jaxrs2.resources.Ticket4065Resource; +import io.swagger.v3.jaxrs2.resources.Ticket4341Resource; import io.swagger.v3.jaxrs2.resources.Ticket4412Resource; import io.swagger.v3.jaxrs2.resources.Ticket4446Resource; import io.swagger.v3.jaxrs2.resources.Ticket4483Resource; @@ -795,6 +796,21 @@ public void test2497() { assertEquals(openAPI.getComponents().getSchemas().get("User").getRequired().get(0), "issue3438"); } + @Test(description = "array required property resolved from ArraySchema.arraySchema.requiredMode") + public void test4341() { + Reader reader = new Reader(new OpenAPI()); + OpenAPI openAPI = reader.read(Ticket4341Resource.class); + + Schema userSchema = openAPI.getComponents().getSchemas().get("User"); + List required = userSchema.getRequired(); + assertTrue(required.contains("requiredArray")); + assertFalse(required.contains("notRequiredArray")); + assertFalse(required.contains("notRequiredArrayWithNotNull")); + assertTrue(required.contains("autoRequiredWithNotNull")); + assertFalse(required.contains("autoNotRequired")); + } + + @Test(description = "test resource with subresources") public void testResourceWithSubresources() { Reader reader = new Reader(new OpenAPI()); diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4341Resource.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4341Resource.java new file mode 100644 index 0000000000..8d32f85ce8 --- /dev/null +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/Ticket4341Resource.java @@ -0,0 +1,51 @@ +package io.swagger.v3.jaxrs2.resources; + +import io.swagger.v3.oas.annotations.media.ArraySchema; +import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.NotNull; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import java.util.List; + +public class Ticket4341Resource { + + @GET + @Path("/user") + public User getUsers() { + return null; + } + + static class User { + @ArraySchema( + arraySchema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED), + schema = @Schema(type = "string") + ) + public List requiredArray; + + @ArraySchema( + arraySchema = @Schema(requiredMode = Schema.RequiredMode.NOT_REQUIRED), + schema = @Schema(type = "string") + ) + public List notRequiredArray; + + @ArraySchema( + arraySchema = @Schema(requiredMode = Schema.RequiredMode.NOT_REQUIRED), + schema = @Schema(type = "string") + ) + @NotNull + public List notRequiredArrayWithNotNull; + + @ArraySchema( + arraySchema = @Schema(requiredMode = Schema.RequiredMode.AUTO), + schema = @Schema(type = "string") + ) + @NotNull + public List autoRequiredWithNotNull; + + @ArraySchema( + arraySchema = @Schema(requiredMode = Schema.RequiredMode.AUTO), + schema = @Schema(type = "string") + ) + public List autoNotRequired; + } +}