Skip to content

Commit 3837814

Browse files
authored
Merge pull request #2035 from maddingo/bugfix/issue-2034
fixed issue 2034, added test case for issue
2 parents 2295b8a + 429c24c commit 3837814

File tree

2 files changed

+58
-6
lines changed

2 files changed

+58
-6
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/reference/Visitor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@ public interface Visitor {
6262

6363
Example visitExample(Example example);
6464

65-
default String readFile(String uri) throws Exception {
66-
try (InputStream inputStream = new FileInputStream(uri)) {
65+
default String readFile(String path) throws Exception {
66+
try (InputStream inputStream = new FileInputStream(path)) {
6767
return IOUtils.toString(inputStream, UTF_8);
6868
}
6969
}
7070

71-
default String readClasspath(String uri) throws Exception {
72-
return ClasspathHelper.loadFileFromClasspath(uri);
71+
default String readClasspath(String classPath) throws Exception {
72+
return ClasspathHelper.loadFileFromClasspath(classPath);
7373
}
7474
default String readHttp(String uri, List<AuthorizationValue> auths) throws Exception {
7575
return RemoteUrl.urlToString(uri, auths);
@@ -81,9 +81,9 @@ default String readURI(String absoluteUri, List<AuthorizationValue> auths) throw
8181
if (resolved.getScheme().startsWith("http")) {
8282
return readHttp(absoluteUri, auths);
8383
} else if (resolved.getScheme().startsWith("file")) {
84-
return readFile(absoluteUri);
84+
return readFile(resolved.getPath());
8585
} else if (resolved.getScheme().startsWith("classpath")) {
86-
return readClasspath(absoluteUri);
86+
return readClasspath(resolved.getPath());
8787
}
8888
}
8989
// If no matches exists, try file
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.swagger.v3.parser.test;
2+
3+
4+
import io.swagger.v3.parser.OpenAPIV3Parser;
5+
import io.swagger.v3.parser.core.models.ParseOptions;
6+
import io.swagger.v3.parser.core.models.SwaggerParseResult;
7+
import org.apache.commons.io.IOUtils;
8+
import org.testng.annotations.Test;
9+
10+
import java.net.URI;
11+
import java.net.URL;
12+
import java.nio.charset.StandardCharsets;
13+
14+
import static org.testng.Assert.assertEquals;
15+
import static org.testng.Assert.assertNull;
16+
17+
/**
18+
* Test parsing classpath and file URIs.
19+
* Before the fix, an exception is logged as an error and a message containing "(No such file or directory)"
20+
* is added to the parse result.
21+
* This test checks for the absence of the message.
22+
*/
23+
public class OpenAPIV31ParserUriTest {
24+
@Test
25+
public void resolveFileInput() throws Exception {
26+
URI uri = getClass().getResource("/3.1.0/basic.yaml").toURI();
27+
assertEquals(uri.getScheme(), "file");
28+
String uriString = uri.toString();
29+
ParseOptions options = new ParseOptions();
30+
options.setResolve(true);
31+
SwaggerParseResult result = new OpenAPIV3Parser().readLocation(uriString, null, options);
32+
validateParseResult(result, "(No such file or directory)");
33+
}
34+
35+
@Test
36+
public void resolveClasspathInput() throws Exception {
37+
URL url = getClass().getResource("/3.1.0/basic.yaml");
38+
String content = IOUtils.toString(url, StandardCharsets.UTF_8);
39+
ParseOptions options = new ParseOptions();
40+
options.setResolve(true);
41+
SwaggerParseResult result = new OpenAPIV3Parser().readContents(content, null, options, "classpath:/3.1.0/basic.yaml");
42+
validateParseResult(result, "Could not find classpath:/3.1.0/basic.yaml");
43+
}
44+
45+
private static void validateParseResult(SwaggerParseResult result, String checkForMessage) {
46+
String noSuchFileMessage = result.getMessages().stream()
47+
.filter(message -> message.contains(checkForMessage))
48+
.findFirst()
49+
.orElse(null);
50+
assertNull(noSuchFileMessage);
51+
}
52+
}

0 commit comments

Comments
 (0)