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 b2d60b75cc..07b85bc82f 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 @@ -2,6 +2,7 @@ import io.swagger.v3.oas.models.examples.Example; +import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.MediaType; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.parameters.Parameter; @@ -142,6 +143,23 @@ public List processParameters(List parameters) { Schema schema = parameter.getSchema(); if(schema != null){ schemaProcessor.processSchema(schema); + }else if(parameter.getContent() != null){ + Map content = parameter.getContent(); + for( String mediaName : content.keySet()) { + MediaType mediaType = content.get(mediaName); + if(mediaType.getSchema()!= null) { + schema = mediaType.getSchema(); + if (schema != null) { + schemaProcessor.processSchema(schema); + } + } + if(mediaType.getExamples() != null) { + for(Example ex: mediaType.getExamples().values()){ + exampleProcessor.processExample(ex); + } + } + } + } } diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/PathsProcessor.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/PathsProcessor.java index 8c5ce7f050..2e3c4d61a9 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/PathsProcessor.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/PathsProcessor.java @@ -75,7 +75,6 @@ public void processPaths() { final List processedPathParameters = parameterProcessor.processParameters(pathItem.getParameters()); pathItem.setParameters(processedPathParameters); - //addParametersToEachOperation(pathItem); final Map operationMap = pathItem.readOperationsMap(); 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 318c0f0e49..7775cea28a 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 @@ -45,16 +45,24 @@ public void testProcessParameters_TypesThatAreNotRefOrBody(@Injectable final Hea { headerParameter.getSchema(); result = null; + headerParameter.getContent(); + result = null; queryParameter.getSchema(); result = null; + queryParameter.getContent(); + result = null; cookieParameter.getSchema(); result = null; + cookieParameter.getContent(); + result = null; pathParameter.getSchema(); result = null; + pathParameter.getContent(); + result = null; } }; final List processedParameters = new ParameterProcessor(cache, openAPI) - .processParameters(Arrays.asList(headerParameter, + .processParameters(Arrays.asList(headerParameter, queryParameter, cookieParameter, pathParameter)); @@ -78,8 +86,7 @@ public void testProcessParameters_TypesThatAreNotRefOrBody(@Injectable final Hea } @Test - public void testProcessParameters_RefToHeader( - @Injectable final HeaderParameter resolvedHeaderParam) throws Exception { + public void testProcessParameters_RefToHeader(@Injectable final HeaderParameter resolvedHeaderParam) throws Exception { expectedModelProcessorCreation(); final String ref = "#/components/parameters/foo"; @@ -90,11 +97,12 @@ public void testProcessParameters_RefToHeader( { resolvedHeaderParam.getSchema(); result = null; + resolvedHeaderParam.getContent(); + result = null; } }; - final List processedParameters = new ParameterProcessor(cache, openAPI) - .processParameters(Arrays.asList(refParameter)); + final List processedParameters = new ParameterProcessor(cache, openAPI).processParameters(Arrays.asList(refParameter)); new FullVerifications(){{}}; 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 c843d6f8f6..bae2618160 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 @@ -65,6 +65,15 @@ public class OpenAPIV3ParserTest { protected int serverPort = getDynamicPort(); protected WireMockServer wireMockServer; + @Test + public void testRemoteParameterIssue1094(@Injectable final List auths) throws Exception{ + + OpenAPI result = new OpenAPIV3Parser().read("issue-1094/swagger.yaml"); + Assert.assertNotNull(result); + Assert.assertNotNull(result.getComponents().getSchemas().get("PlmnId")); + + } + @Test public void testIssue1071() { diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1094/common.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1094/common.yaml new file mode 100644 index 0000000000..f5f0cf0e2f --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/issue-1094/common.yaml @@ -0,0 +1,14 @@ +openapi: "3.0.0" +info: + version: 15.3.0 + title: "Common Data Types" +paths: {} +components: + schemas: + PlmnId: + type: object + properties: + mcc: + type: string + mnc: + type: string \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1094/swagger.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1094/swagger.yaml new file mode 100644 index 0000000000..1ca2e0e51c --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/issue-1094/swagger.yaml @@ -0,0 +1,22 @@ +openapi: "3.0.0" +info: + version: 15.3.0 + title: test +paths: + /my-app: + get: + parameters: + - name: target-plmn-list + in: query + content: + application/json: + schema: + type: array + items: + $ref: 'common.yaml#/components/schemas/PlmnId' + minItems: 1 + responses: + '200': + description: Expected response to a valid request + schema: + type: string \ No newline at end of file