diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java index 4bf713ddaa..a25ba4087b 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java @@ -420,9 +420,13 @@ public Operation operation(ObjectNode obj, String location, ParseResult result) List security = securityRequirements(array, location, result); if (security != null) { List>> ss = new ArrayList<>(); - for (SecurityRequirement s : security) { - if (s.getRequirements() != null && s.getRequirements().size() > 0) { - ss.add(s.getRequirements()); + for(SecurityRequirement s : security) { + if(s.getRequirements() != null) { + if (s.getRequirements().size() > 0) { + ss.add(s.getRequirements()); + } else { + ss.add(Collections.>emptyMap()); + } } } output.setSecurity(ss); diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java index 7f7fae1c8b..69a8daa2d6 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java @@ -224,6 +224,36 @@ public void testSecurity() { Assert.assertTrue(requirements.contains("write:pets")); } + @Test + public void testSecurityWithEmpty() { + String json = "{\n" + + " \"swagger\": \"2.0\",\n" + + " \"security\": [\n" + + " {},\n" + + " {\n" + + " \"petstore_auth\": [\n" + + " \"write:pets\",\n" + + " \"read:pets\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + "}"; + SwaggerParser parser = new SwaggerParser(); + + SwaggerDeserializationResult result = parser.readWithInfo(json); + + Swagger swagger = result.getSwagger(); + + assertNotNull(swagger.getSecurity()); + List security = swagger.getSecurity(); + Assert.assertTrue(security.size() == 2); + Assert.assertTrue(security.get(0).getRequirements().size() == 0); + Assert.assertTrue(security.get(1).getRequirements().size() == 1); + + List requirement = security.get(1).getRequirements().get("petstore_auth"); + Assert.assertTrue(requirement.size() == 2); + } + @Test public void testSecurityDefinition() { String json = "{\n" + @@ -566,6 +596,51 @@ public void testPaths() { assertTrue(scopes.contains("read:pets")); assertTrue(scopes.contains("write:pets")); } + + @Test + public void testOperationSecurityWithEmpty() { + String json = "{\n" + + " \"swagger\": \"2.0\",\n" + + " \"paths\": {\n" + + " \"/pet\": {\n" + + " \"foo\": \"bar\",\n" + + " \"get\": {\n" + + " \"security\": [\n" + + " {},\n" + + " {\n" + + " \"petstore_auth\": [\n" + + " \"write:pets\",\n" + + " \"read:pets\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + SwaggerParser parser = new SwaggerParser(); + + SwaggerDeserializationResult result = parser.readWithInfo(json); + List messageList = result.getMessages(); + Set messages = new HashSet(messageList); + assertTrue(messages.contains("attribute paths.'/pet'.foo is unexpected")); + Swagger swagger = result.getSwagger(); + + Path path = swagger.getPath("/pet"); + assertNotNull(path); + Operation operation = path.getGet(); + assertNotNull(operation); + List>> security = operation.getSecurity(); + + assertTrue(security.size() == 2); + + Map> requirement1 = security.get(0); + assertTrue(requirement1.isEmpty()); + + Map> requirement2 = security.get(1); + assertTrue(requirement2.containsKey("petstore_auth")); + assertFalse(requirement2.get("petstore_auth").isEmpty()); + } @Test public void testPathsWithRefResponse() {