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 fc97af5443..4f36aa3d2a 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 @@ -56,6 +56,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -1577,14 +1578,12 @@ public SecurityScheme getSecurityScheme(ObjectNode node, String location, ParseR securityScheme.setName(value); } - value = getString("in", node, inRequired, location, result); - if (StringUtils.isNotBlank(value)) { - if (QUERY_PARAMETER.equals(value)) { - securityScheme.setIn(SecurityScheme.In.QUERY); - } else if (HEADER_PARAMETER.equals(value)) { - securityScheme.setIn(SecurityScheme.In.HEADER); - } - } + final String securitySchemeIn = getString("in", node, inRequired, location, result); + final Optional matchingIn = Arrays.stream(SecurityScheme.In.values()) + .filter(in -> in.toString().equals(securitySchemeIn)) + .findFirst(); + + securityScheme.setIn(matchingIn.orElse(null)); value = getString("scheme", node, schemeRequired, location, result); if (StringUtils.isNotBlank(value)) { @@ -2578,4 +2577,4 @@ public Location(String location, String key) { } } -} \ No newline at end of file +} 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 a370c64665..ea2b0669e3 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 @@ -810,7 +810,7 @@ public void readSecuritySchemesObject(JsonNode rootNode) throws Exception { final Map securitySchemes = openAPI.getComponents().getSecuritySchemes(); Assert.assertNotNull(securitySchemes); - Assert.assertEquals(securitySchemes.size(),9); + Assert.assertEquals(securitySchemes.size(),10); SecurityScheme securityScheme = securitySchemes.get("reference"); assertTrue(securityScheme.get$ref().equals("#/components/securitySchemes/api_key")); @@ -832,7 +832,12 @@ public void readSecuritySchemesObject(JsonNode rootNode) throws Exception { securityScheme = securitySchemes.get("api_key"); assertTrue(securityScheme.getType()== SecurityScheme.Type.APIKEY); - + assertTrue(securityScheme.getIn()== SecurityScheme.In.HEADER); + + securityScheme = securitySchemes.get("api_key_cookie"); + assertTrue(securityScheme.getType()== SecurityScheme.Type.APIKEY); + assertTrue(securityScheme.getIn()== SecurityScheme.In.COOKIE); + securityScheme = securitySchemes.get("http"); assertTrue(securityScheme.getType()== SecurityScheme.Type.HTTP); diff --git a/modules/swagger-parser-v3/src/test/resources/oas3.yaml.template b/modules/swagger-parser-v3/src/test/resources/oas3.yaml.template index 0ba71bcd1a..200bdaf651 100644 --- a/modules/swagger-parser-v3/src/test/resources/oas3.yaml.template +++ b/modules/swagger-parser-v3/src/test/resources/oas3.yaml.template @@ -1170,6 +1170,10 @@ components: type: apiKey name: api_key in: header + api_key_cookie: + type: apiKey + name: api_key + in: cookie http: type: http scheme: Basic