From f6670fd247d3e2d1768aa73b7731386e97a5ad62 Mon Sep 17 00:00:00 2001 From: Mohammed Rizwan <88297036+Intellisense-Academy@users.noreply.github.com> Date: Thu, 28 Oct 2021 19:05:41 +0530 Subject: [PATCH] Fix for issue-1621 This issue happens when the referenced file name contains more than 1 dot --- .../io/swagger/v3/parser/util/RefUtils.java | 4 ++++ .../io/swagger/parser/OpenAPIParserTest.java | 20 ++++++++++++++++ .../resources/issue-1621/example.get.yaml | 1 + .../resources/issue-1621/example.openapi.yaml | 23 +++++++++++++++++++ .../resources/issue-1621/example.post.yaml | 1 + 5 files changed, 49 insertions(+) create mode 100644 modules/swagger-parser/src/test/resources/issue-1621/example.get.yaml create mode 100644 modules/swagger-parser/src/test/resources/issue-1621/example.openapi.yaml create mode 100644 modules/swagger-parser/src/test/resources/issue-1621/example.post.yaml 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