From a14671fdcaef4d545c5ad95ebd345bebf3bf96e8 Mon Sep 17 00:00:00 2001 From: Dag Karlsson Date: Thu, 29 Sep 2022 12:50:21 +0300 Subject: [PATCH 1/2] Update ReferenceUtils to better support windows filesystem Occurs on windows filesystems: when absoluteUri is something like "C:/openapi.yml", the "scheme" part is resolved into "C". So it passes through all the statements and lands on an exception being thrown. A more resilient approach is to always default to reading from file when the scheme cannot be determined --- .../v3/parser/reference/ReferenceUtils.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java index 3123d073cb..70518aa5fe 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java @@ -70,7 +70,13 @@ public static boolean isAnchor(String ref) { public static String readURI(String absoluteUri, List auths) throws Exception { URI resolved = new URI(absoluteUri); - if (StringUtils.isBlank(resolved.getScheme())) { + if (resolved.getScheme().startsWith("http")) { + return readHttp(absoluteUri, auths); + } else if (resolved.getScheme().startsWith("file")) { + return readFile(absoluteUri); + } else if (resolved.getScheme().startsWith("classpath")) { + return readClasspath(absoluteUri); + } else { // try file String content = null; try { @@ -82,14 +88,7 @@ public static String readURI(String absoluteUri, List auths) content = readClasspath(absoluteUri); } return content; - } else if (resolved.getScheme().startsWith("http")) { - return readHttp(absoluteUri, auths); - } else if (resolved.getScheme().startsWith("file")) { - return readFile(absoluteUri); - } else if (resolved.getScheme().startsWith("classpath")) { - return readClasspath(absoluteUri); } - throw new RuntimeException("scheme not supported for uri: " + absoluteUri); } public static JsonNode deserializeIntoTree(String content) throws Exception { From ec6bd80979240d0cc6d2b67c668a6e4f38247af3 Mon Sep 17 00:00:00 2001 From: Dag Karlsson Date: Thu, 29 Sep 2022 13:02:20 +0300 Subject: [PATCH 2/2] Fix NPE problems when no scheme can be resolved --- .../v3/parser/reference/ReferenceUtils.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java index 70518aa5fe..7493d8b931 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/ReferenceUtils.java @@ -70,25 +70,26 @@ public static boolean isAnchor(String ref) { public static String readURI(String absoluteUri, List auths) throws Exception { URI resolved = new URI(absoluteUri); - if (resolved.getScheme().startsWith("http")) { - return readHttp(absoluteUri, auths); - } else if (resolved.getScheme().startsWith("file")) { - return readFile(absoluteUri); - } else if (resolved.getScheme().startsWith("classpath")) { - return readClasspath(absoluteUri); - } else { - // try file - String content = null; - try { - content = readFile(absoluteUri); - } catch (Exception e) { - // + if (StringUtils.isNotBlank(resolved.getScheme())) { + if (resolved.getScheme().startsWith("http")) { + return readHttp(absoluteUri, auths); + } else if (resolved.getScheme().startsWith("file")) { + return readFile(absoluteUri); + } else if (resolved.getScheme().startsWith("classpath")) { + return readClasspath(absoluteUri); } - if (StringUtils.isBlank(content)) { - content = readClasspath(absoluteUri); - } - return content; } + // If no matches exists, try file + String content = null; + try { + content = readFile(absoluteUri); + } catch (Exception e) { + // + } + if (StringUtils.isBlank(content)) { + content = readClasspath(absoluteUri); + } + return content; } public static JsonNode deserializeIntoTree(String content) throws Exception {