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 1ea303994b..518c8bcb41 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 @@ -6,7 +6,6 @@ import io.swagger.v3.parser.urlresolver.PermittedUrlsChecker; import org.apache.commons.io.IOUtils; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -235,7 +234,7 @@ public static String readExternalRef(String file, RefFormat refFormat, List environment = Collections.singletonMap("create", "true"); + URI archiveUri = URI.create("jar:" + archive.toUri()); + String expectedContent = "openapi: 3.0.0\n"; + + try (FileSystem zipFileSystem = FileSystems.newFileSystem(archiveUri, environment)) { + Path parentDirectory = zipFileSystem.getPath("/specs"); + Path referencedFile = parentDirectory.resolve("error.openapi.yaml"); + Files.createDirectories(parentDirectory); + Files.write(referencedFile, expectedContent.getBytes(UTF_8)); + + assertNotSame(FileSystems.getDefault(), referencedFile.getFileSystem()); + + String actualContent = RefUtils.readExternalRef( + "./error.openapi.yaml", + RefFormat.RELATIVE, + Collections.emptyList(), + parentDirectory, + new PermittedUrlsChecker()); + + assertEquals(expectedContent, actualContent); + } finally { + Files.deleteIfExists(archive); + } + } +}