diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java index 273a19fa8a..fde98ab36d 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ParameterProcessor.java @@ -133,6 +133,13 @@ public List processParameters(List parameters) { } + for (Parameter parameter : processedPathLevelParameters) { + Schema schema = parameter.getSchema(); + if(schema != null){ + schemaProcessor.processSchema(schema); + } + } + return processedPathLevelParameters; } } \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java index 60e82e4197..318c0f0e49 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/processors/ParameterProcessorTest.java @@ -13,10 +13,7 @@ import io.swagger.v3.oas.models.parameters.RequestBody; import io.swagger.v3.parser.ResolverCache; import io.swagger.v3.parser.models.RefFormat; -import mockit.FullVerifications; -import mockit.Injectable; -import mockit.Mocked; -import mockit.StrictExpectations; +import mockit.*; import org.testng.annotations.Test; @@ -44,7 +41,18 @@ public void testProcessParameters_TypesThatAreNotRefOrBody(@Injectable final Hea @Injectable final CookieParameter cookieParameter, @Injectable final PathParameter pathParameter) throws Exception { expectedModelProcessorCreation(); - + new Expectations() { + { + headerParameter.getSchema(); + result = null; + queryParameter.getSchema(); + result = null; + cookieParameter.getSchema(); + result = null; + pathParameter.getSchema(); + result = null; + } + }; final List processedParameters = new ParameterProcessor(cache, openAPI) .processParameters(Arrays.asList(headerParameter, queryParameter, @@ -78,6 +86,12 @@ public void testProcessParameters_RefToHeader( Parameter refParameter = new Parameter().$ref(ref); expectLoadingRefFromCache(ref, RefFormat.INTERNAL, resolvedHeaderParam); + new Expectations() { + { + resolvedHeaderParam.getSchema(); + result = null; + } + }; final List processedParameters = new ParameterProcessor(cache, openAPI) .processParameters(Arrays.asList(refParameter)); @@ -132,8 +146,6 @@ private void expectedModelProcessorCreation() { new SchemaProcessor(cache, openAPI); times = 1; result = modelProcessor; - - }}; } } diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java index 13dd389eac..97c7a91fdc 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java @@ -350,10 +350,20 @@ public void testRefAdditionalProperties() throws Exception { OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/relative/additionalProperties.yaml"); Assert.assertNotNull(openAPI); - Assert.assertTrue(openAPI.getComponents().getSchemas().size() == 3); + Assert.assertEquals(4, openAPI.getComponents().getSchemas().size()); Assert.assertNotNull(openAPI.getComponents().getSchemas().get("link-object")); Assert.assertNotNull(openAPI.getComponents().getSchemas().get("rel-data")); Assert.assertNotNull(openAPI.getComponents().getSchemas().get("result")); + Assert.assertNotNull(openAPI.getComponents().getSchemas().get("SomeId")); + + PathItem pathItem = openAPI.getPaths().get("/issue749"); + Assert.assertNotNull(pathItem); + List parameters = pathItem.getGet().getParameters(); + Assert.assertNotNull(parameters); + Assert.assertEquals(parameters.size(), 1); + Assert.assertEquals(parameters.get(0).getName(), "i"); + Assert.assertNotNull(parameters.get(0).getSchema()); + Assert.assertEquals(parameters.get(0).getSchema().get$ref(), "#/components/schemas/SomeId"); } @Test diff --git a/modules/swagger-parser-v3/src/test/resources/relative/additionalProperties.yaml b/modules/swagger-parser-v3/src/test/resources/relative/additionalProperties.yaml index a8f93da168..ee8a5f497a 100644 --- a/modules/swagger-parser-v3/src/test/resources/relative/additionalProperties.yaml +++ b/modules/swagger-parser-v3/src/test/resources/relative/additionalProperties.yaml @@ -15,4 +15,18 @@ paths: content: application/json: schema: - "$ref": "./globals.yaml#/components/schemas/result" \ No newline at end of file + "$ref": "./globals.yaml#/components/schemas/result" + "/issue749": + get: + parameters: + - name: i + in: query + description: param i + required: true + style: form + explode: true + schema: + $ref: ./someid-schema.yaml#/SomeId + responses: + '204': + description: No content result \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/resources/relative/someid-schema.yaml b/modules/swagger-parser-v3/src/test/resources/relative/someid-schema.yaml new file mode 100644 index 0000000000..8b9563818b --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/relative/someid-schema.yaml @@ -0,0 +1,5 @@ +SomeId: + type: integer + format: int32 + description: My value 123 + example: 123 \ No newline at end of file