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 0413f79312..5e6066d8c1 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 @@ -137,7 +137,8 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) { } schemaFullRef = FilenameUtils.separatorsToUnix(schemaFullRef); } - schema.set$ref(processRefToExternalSchema(schemaFullRef, ref)); + // Fix for issue-1865: use internal prefix + schema.set$ref(RefType.SCHEMAS.getInternalPrefix()+ processRefToExternalSchema(schemaFullRef, ref)); } } else { processRefToExternalSchema(file + schema.get$ref(), RefFormat.RELATIVE); 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 561a3b5679..d3ca9a7ad6 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 @@ -47,14 +47,11 @@ public static String computeDefinitionName(String ref) { final String[] filePathElements = file.split("/"); plausibleName = filePathElements[filePathElements.length - 1]; - final String[] split = plausibleName.split("\\."); - // Fix for issue-1621 and issue-1865 - //validate number of dots - if(split.length > 2) { - //Remove dot so ref can be interpreted as internal and relative in Swagger-Core schema class 'set$ref' - plausibleName = String.join("", Arrays.copyOf(split, split.length - 1)); - }else{ - plausibleName = split[0]; + // Fix for issue-1621 and issue-2092 + // Remove only the file extension from the plausible name but keep all other dots + int lastDotIndex = plausibleName.lastIndexOf('.'); + if (lastDotIndex > 0) { + plausibleName = plausibleName.substring(0, lastDotIndex); } } @@ -90,7 +87,7 @@ public static RefFormat computeRefFormat(String ref) { } public static String mungedRef(String refString) { - // Ref: IETF RFC 3966, Section 5.2.2 + // Ref: IETF RFC 3986, Section 5.2.2 if (!refString.contains(":") && // No scheme !refString.startsWith("#") && // Path is not empty !refString.startsWith("/") && // Path is not absolute 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 997f1c23bd..f3bdfff83e 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 @@ -112,7 +112,7 @@ public void testIssue1865() throws Exception { Assert.assertNotNull(result); Assert.assertNotNull(result.getOpenAPI()); - Assert.assertEquals(result.getOpenAPI().getComponents().getSchemas().get("Foo").get$ref(), "#/components/schemas/foomodel"); + Assert.assertEquals(result.getOpenAPI().getComponents().getSchemas().get("Foo").get$ref(), "#/components/schemas/foo.model"); } @Test