diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/RefUtils.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/RefUtils.java index 8aff95498b..910089972c 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/RefUtils.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/RefUtils.java @@ -46,7 +46,11 @@ public static String computeDefinitionName(String ref) { plausibleName = filePathElements[filePathElements.length - 1]; final String[] split = plausibleName.split("\\."); + // Fix for issue-1621 plausibleName = split[0]; + for (int i = 1; i < split.length - 1; i++) { + plausibleName += "." + split[i]; + } } return plausibleName; diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java index f7641cb5ac..6eeffefd1e 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java @@ -40,6 +40,26 @@ public void testIssue1143(){ assertNotNull(result.getOpenAPI().getComponents().getSchemas().get("identificacion_usuario_aplicacion")); } + @Test + public void testIssue1621() { + final ParseOptions parseOptions = new ParseOptions(); + parseOptions.setResolve(true); + parseOptions.setResolveFully(true); + parseOptions.setResolveCombinators(false); + OpenAPIParser openAPIParser = new OpenAPIParser(); + SwaggerParseResult swaggerParseResult = openAPIParser.readLocation("issue-1621/example.openapi.yaml", null, parseOptions); + assertEquals(0, swaggerParseResult.getMessages().size()); + OpenAPI api = swaggerParseResult.getOpenAPI(); + assertEquals("POST Example", api.getPaths() + .get("/example") + .getPost() + .getRequestBody() + .getContent() + .get("application/json") + .getSchema() + .getTitle()); + } + @Test public void testIssue749() { ParseOptions options = new ParseOptions(); diff --git a/modules/swagger-parser/src/test/resources/issue-1621/example.get.yaml b/modules/swagger-parser/src/test/resources/issue-1621/example.get.yaml new file mode 100644 index 0000000000..09dc55fb2e --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-1621/example.get.yaml @@ -0,0 +1 @@ +title: GET Example \ No newline at end of file diff --git a/modules/swagger-parser/src/test/resources/issue-1621/example.openapi.yaml b/modules/swagger-parser/src/test/resources/issue-1621/example.openapi.yaml new file mode 100644 index 0000000000..216969255a --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-1621/example.openapi.yaml @@ -0,0 +1,23 @@ +openapi: 3.0.1 +info: + title: Example OpenAPI spec + version: 0.0.1 +paths: + '/example': + post: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ExamplePost' + responses: + 204: + description: No content +components: + schemas: + # Renaming this key from `Example` to `ExampleGet` stops the issue from occurring + # Removing this key stops the issue from occurring + Example: + $ref: example.get.yaml + ExamplePost: + $ref: example.post.yaml \ No newline at end of file diff --git a/modules/swagger-parser/src/test/resources/issue-1621/example.post.yaml b/modules/swagger-parser/src/test/resources/issue-1621/example.post.yaml new file mode 100644 index 0000000000..2a3034b6a9 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/issue-1621/example.post.yaml @@ -0,0 +1 @@ +title: POST Example \ No newline at end of file