diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java index b86e22adcd..fc97af5443 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java @@ -2384,19 +2384,23 @@ public List getSecurityRequirementsList(ArrayNode nodes, St if (node.getNodeType().equals(JsonNodeType.OBJECT)) { SecurityRequirement securityRequirement = new SecurityRequirement(); Set keys = getKeys((ObjectNode) node); - for (String key : keys) { - if (key != null) { - JsonNode value = node.get(key); - if (key != null && JsonNodeType.ARRAY.equals(value.getNodeType())) { - ArrayNode arrayNode = (ArrayNode)value; - List scopes = Stream - .generate(arrayNode.elements()::next) - .map((n) -> n.asText()) - .limit(arrayNode.size()) - .collect(Collectors.toList()); - securityRequirement.addList(key,scopes); - if (securityRequirement.size() > 0){ - securityRequirements.add(securityRequirement); + if (keys.size() == 0){ + securityRequirements.add(securityRequirement); + }else { + for (String key : keys) { + if (key != null) { + JsonNode value = node.get(key); + if (key != null && JsonNodeType.ARRAY.equals(value.getNodeType())) { + ArrayNode arrayNode = (ArrayNode) value; + List scopes = Stream + .generate(arrayNode.elements()::next) + .map((n) -> n.asText()) + .limit(arrayNode.size()) + .collect(Collectors.toList()); + securityRequirement.addList(key, scopes); + if (securityRequirement.size() > 0) { + securityRequirements.add(securityRequirement); + } } } } @@ -2404,8 +2408,6 @@ public List getSecurityRequirementsList(ArrayNode nodes, St } } - - return securityRequirements; } diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java index de2d1775f9..a370c64665 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java @@ -643,6 +643,25 @@ public void readMissingServerObject() throws Exception { assertEquals(openAPI.getServers().get(0).getUrl(),"/"); } + @Test + public void readEmptySecurityRequirement() throws Exception { + final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + final JsonNode rootNode = mapper.readTree(Files.readAllBytes(java.nio.file.Paths.get(getClass().getResource("/oas.yaml").toURI()))); + + final OpenAPIDeserializer deserializer = new OpenAPIDeserializer(); + final SwaggerParseResult result = deserializer.deserialize(rootNode); + + Assert.assertNotNull(result); + + final OpenAPI openAPI = result.getOpenAPI(); + Assert.assertNotNull(openAPI); + + SecurityRequirement securityRequirement = openAPI.getSecurity().get(0); + + assertTrue(securityRequirement.isEmpty()); + assertEquals(openAPI.getSecurity().size(), 4); + } + @Test public void readEmptyServerObject() throws Exception { final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); diff --git a/modules/swagger-parser-v3/src/test/resources/oas.yaml b/modules/swagger-parser-v3/src/test/resources/oas.yaml index 779eed2649..164a8ffad7 100644 --- a/modules/swagger-parser-v3/src/test/resources/oas.yaml +++ b/modules/swagger-parser-v3/src/test/resources/oas.yaml @@ -1,4 +1,10 @@ openapi: 3.0.1 +"security": [ + {}, + {"oauth": […]}, + {"token-1": []}, + {"token-2": []} +] paths: /pet: summary: "summary"