From 8515c09ef157bf505754ec7feab8264166b94efc Mon Sep 17 00:00:00 2001 From: gracekarina Date: Fri, 24 May 2019 16:40:07 -0500 Subject: [PATCH] fix and test for issue #1105 --- .../processors/ExternalRefProcessor.java | 10 ++++--- .../v3/parser/test/OpenAPIV3ParserTest.java | 9 ++++-- .../src/test/resources/issue-1105/domain.yaml | 30 +++++++++++++++++++ .../resources/issue-1105/swagger-api.yaml | 14 +++++++++ 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 modules/swagger-parser-v3/src/test/resources/issue-1105/domain.yaml create mode 100644 modules/swagger-parser-v3/src/test/resources/issue-1105/swagger-api.yaml diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java index 9f5f3b3925..94e203f972 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java @@ -182,7 +182,7 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) { return newRef; } - private void processProperty(Schema property, String file) { + private void processSchema(Schema property, String file) { if (property != null) { if (StringUtils.isNotBlank(property.get$ref())) { processRefSchema(property, file); @@ -191,10 +191,10 @@ private void processProperty(Schema property, String file) { processProperties(property.getProperties(), file); } if (property instanceof ArraySchema) { - processProperty(((ArraySchema) property).getItems(), file); + processSchema(((ArraySchema) property).getItems(), file); } if (property.getAdditionalProperties() instanceof Schema) { - processProperty(((Schema) property.getAdditionalProperties()), file); + processSchema(((Schema) property.getAdditionalProperties()), file); } if (property instanceof ComposedSchema) { ComposedSchema composed = (ComposedSchema) property; @@ -208,7 +208,7 @@ private void processProperty(Schema property, String file) { private void processProperties(Collection properties, String file) { if (properties != null) { for (Schema property : properties) { - processProperty(property, file); + processSchema(property, file); } } } @@ -269,6 +269,8 @@ public String processRefToExternalResponse(String $ref, RefFormat refFormat) { } else { processRefToExternalSchema(file + schema.get$ref(), RefFormat.RELATIVE); } + }else{ + processSchema(schema,file); } } } 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 c5cd8d1d93..c40a11059b 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 @@ -560,8 +560,6 @@ public void testInlineModelResolver(@Injectable final List a @Test public void test30NoOptions(@Injectable final List auths) throws Exception{ - - String pathFile = FileUtils.readFileToString(new File("src/test/resources/oas3.yaml.template")); pathFile = pathFile.replace("${dynamicPort}", String.valueOf(this.serverPort)); @@ -610,6 +608,13 @@ public void testInlineModelResolverByUrl(){ assertNotNull(userAddress.getProperties().get("street")); } + @Test + public void testIssue1105() throws Exception { + OpenAPI openAPI = new OpenAPIV3Parser().read("issue-1105/swagger-api.yaml"); + Assert.assertNotNull(openAPI); + Assert.assertNotNull(openAPI.getComponents().getSchemas().get("ErrorCodeDescription")); + } + @Test public void testRefAdditionalProperties() throws Exception { OpenAPI openAPI = new OpenAPIV3Parser().read("src/test/resources/relative/additionalProperties.yaml"); diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1105/domain.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1105/domain.yaml new file mode 100644 index 0000000000..67d37f94a3 --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/issue-1105/domain.yaml @@ -0,0 +1,30 @@ +openapi: 3.0.2 +info: + title: API Components + description: Common components + version: '1.0' +components: + schemas: + ErrorCodeDescription: + type: object + properties: + code: + format: int32 + type: integer + description: HTTP error code. + description: + type: string + description: Brief description of the error. + details: + type: string + description: Details about the error. + responses: + 401: + description: User is not authorized for this action + content: + application/json: + schema: + uniqueItems: false + type: array + items: + $ref: "#/components/schemas/ErrorCodeDescription" \ No newline at end of file diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1105/swagger-api.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1105/swagger-api.yaml new file mode 100644 index 0000000000..58d806e24e --- /dev/null +++ b/modules/swagger-parser-v3/src/test/resources/issue-1105/swagger-api.yaml @@ -0,0 +1,14 @@ +openapi: "3.0.2" +info: + title: User and Session + description: Admin API endpoints. + version: "0.1" +paths: + /users: + get: + responses: + "401": + $ref: "./domain.yaml#/components/responses/401" +components: { + schemas: {} +} \ No newline at end of file