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)); } } 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 }