From b053930222bcc868bbeb9f999c8ff6c365275956 Mon Sep 17 00:00:00 2001 From: Gabriel Castro Date: Thu, 25 Mar 2021 17:35:40 -0400 Subject: [PATCH 1/2] fix: schemas of inline responses are now parsed the same as ones in definitions --- .../main/java/io/swagger/parser/util/SwaggerDeserializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 eafc04cf75..790922fc95 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 @@ -1199,7 +1199,7 @@ public Response response(ObjectNode node, String location, ParseResult result) { result.invalidType(location, "$ref", "string", node); } } else { - output.responseSchema(Json.mapper().convertValue(schema, Model.class)); + output.responseSchema(definition(schema, location + ".schema", result)); } } From f8ade462ff3510b531d2f17b52252859936194de Mon Sep 17 00:00:00 2001 From: Gabriel Castro Date: Thu, 25 Mar 2021 21:57:31 -0400 Subject: [PATCH 2/2] add tests for issue #1541 --- .../io/swagger/parser/SwaggerParserTest.java | 33 ++++++++++++++++ .../src/test/resources/issue-1541/main.yaml | 38 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 modules/swagger-parser/src/test/resources/issue-1541/main.yaml diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java index d8d3e01c88..5c1a2b7c78 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java @@ -1666,6 +1666,39 @@ public void testIssuei432() { assertEquals("attribute paths.'/tickets'(get).responses.200.title is unexpected",result.getMessages().get(0)); } + @Test + public void testIssue1541() { + SwaggerParser parser = new SwaggerParser(); + final Swagger swagger = parser.read("src/test/resources/issue-1541/main.yaml"); + assertNotNull(swagger); + + Model inlineSchema = swagger.getPaths() + .get("/inline_response") + .getGet() + .getResponses() + .get("200") + .getResponseSchema(); + + assertNotNull(inlineSchema); + assertNotNull(inlineSchema.getProperties()); + assertNotNull(inlineSchema.getProperties().get("a")); + assertEquals("number", inlineSchema.getProperties().get("a").getType()); + + Model responseRef = swagger.getPaths() + .get("/ref_response") + .getGet() + .getResponses() + .get("200") + .getResponseSchema(); + + assertEquals("#/definitions/ref_response_object", responseRef.getReference()); + + Model refSchema = swagger.getDefinitions() + .get("ref_response_object"); + + assertEquals("number", refSchema.getProperties().get("a").getType()); + } + @Test public void testRequiredItemsInComposedModel() { SwaggerDeserializationResult result = new SwaggerParser().readWithInfo("src/test/resources/allOf-example/allOf.yaml", null, true); diff --git a/modules/swagger-parser/src/test/resources/issue-1541/main.yaml b/modules/swagger-parser/src/test/resources/issue-1541/main.yaml new file mode 100644 index 0000000000..6a8041d124 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-1541/main.yaml @@ -0,0 +1,38 @@ +swagger: '2.0' +info: + title: 'Issue 1541' + version: '1.0' +consumes: + - application/json +paths: + /inline_response: + get: + responses: + '200': + description: ok + schema: + type: object + additionalProperties: false + properties: + a: + type: number + /ref_response: + get: + responses: + '200': + description: ok + schema: + $ref: '#/definitions/ref_response_object' +definitions: + ref_response_object: + type: object + additionalProperties: false + properties: + a: + type: number + b: + type: object + additionalProperties: false + properties: + c: { type: number } + d: { type: string }