From 9ddfaedc30a38a17fd72fbe6975ebf2cbe36de7a Mon Sep 17 00:00:00 2001 From: "Allen D. Ball" Date: Sat, 24 Jul 2021 01:26:57 -0700 Subject: [PATCH 1/3] Added support for jar: URLs to readContentFromLocation(String,List auth). --- .../src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java index be40ade290..1aef53222f 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java @@ -15,6 +15,7 @@ import io.swagger.v3.parser.util.OpenAPIDeserializer; import io.swagger.v3.parser.util.RemoteUrl; import io.swagger.v3.parser.util.ResolverFully; +import java.io.InputStream; import java.net.URI; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -28,6 +29,7 @@ import java.util.ServiceLoader; import javax.net.ssl.SSLHandshakeException; import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -219,6 +221,9 @@ private String readContentFromLocation(String location, List try { if (adjustedLocation.toLowerCase().startsWith("http")) { return RemoteUrl.urlToString(adjustedLocation, auth); + } else if (adjustedLocation.toLowerCase().startsWith("jar:")) { + final InputStream in = new URI(adjustedLocation).toURL().openStream(); + return IOUtils.toString(in, encoding); } else { final String fileScheme = "file:"; final Path path = adjustedLocation.toLowerCase().startsWith(fileScheme) ? From 9ac1dde8f2b62415d9fb1777b61b2ff84bb2cdba Mon Sep 17 00:00:00 2001 From: "Allen D. Ball" Date: Sat, 24 Jul 2021 12:55:55 -0700 Subject: [PATCH 2/3] Added test for https://github.com/swagger-api/swagger-parser/issues/1592. --- .../v3/parser/test/OpenAPIV3ParserTest.java | 12 ++++++++++++ .../src/test/resources/issue-1592.jar | Bin 0 -> 563 bytes 2 files changed, 12 insertions(+) create mode 100644 modules/swagger-parser-v3/src/test/resources/issue-1592.jar 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 28e82cd905..00a788a3ed 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 @@ -21,6 +21,7 @@ import java.io.IOException; import java.math.BigDecimal; import java.net.HttpURLConnection; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashSet; @@ -2872,4 +2873,15 @@ public void testIssue1540() throws Exception{ Assert.assertNotNull(testPutExtensions.get("x-order")); Assert.assertEquals((String)testPutExtensions.get("x-order"),"2147483647"); } + + @Test + public void testIssue1592() throws Exception { + File file = new File("src/test/resources/issue-1592.jar"); + URL url = new URL("jar:" + file.toURI() + "!/test.yaml"); + ParseOptions options = new ParseOptions(); + options.setResolve(true); + SwaggerParseResult result = new OpenAPIV3Parser().readLocation(url.toString(), null, options); + OpenAPI openAPI = result.getOpenAPI(); + assertNotNull(openAPI); + } } diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1592.jar b/modules/swagger-parser-v3/src/test/resources/issue-1592.jar new file mode 100644 index 0000000000000000000000000000000000000000..3bf65fae1fa349bb0e9d789561e306d125a7ceb3 GIT binary patch literal 563 zcmWIWW@Zs#;Nak3c#!lXhye+3GO#fCx`sIFdiuHP|2xINz|0Wf&CUT*!30$nfK#&w zPz7AGucM!*n`>~0p0C?y-!rFuymj?1@_OrPojY@WbCAIm;|EWR^t^m^Jbf>gu43Vu z@lx`Iq*jK-vM1tGeuyu5R=Kkx`%}@!B1W+F2RBdFwFMe(1H=gHId*_K6r(`Kk&26X5IuwxmSL>N$m8WxVAphgAo zumc5rfH$gEDg%z^HI1$=`tUW*s54iwuRyL3 Date: Fri, 24 Sep 2021 08:52:34 -0700 Subject: [PATCH 3/3] Avoid NPE in PathUtils for JAR URLs (see discussion in https://github.com/swagger-api/swagger-parser/pull/1593). --- .../src/main/java/io/swagger/v3/parser/ResolverCache.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java index e40db066fc..6ac132ba34 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java @@ -70,7 +70,7 @@ public ResolverCache(OpenAPI openApi, List auths, String par this.rootPath = parentFileLocation; if(parentFileLocation != null) { - if(parentFileLocation.startsWith("http")) { + if(parentFileLocation.startsWith("http") || parentFileLocation.startsWith("jar")) { parentDirectory = null; } else { parentDirectory = PathUtils.getParentDirectoryOfFile(parentFileLocation);