Skip to content

Commit a7402b4

Browse files
authored
Merge pull request swagger-api#580 from Dema/feature/input-spec-from-classpath
Fix to SwaggerCompatConverter so it can load inputSpec from classpath.
2 parents c5928dd + a912130 commit a7402b4

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

modules/swagger-compat-spec-parser/src/main/java/io/swagger/parser/SwaggerCompatConverter.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,23 @@
5353
import io.swagger.models.resourcelisting.ImplicitGrant;
5454
import io.swagger.models.resourcelisting.OAuth2Authorization;
5555
import io.swagger.models.resourcelisting.ResourceListing;
56+
import io.swagger.parser.util.ClasspathHelper;
5657
import io.swagger.parser.util.RemoteUrl;
5758
import io.swagger.parser.util.SwaggerDeserializationResult;
5859
import io.swagger.report.MessageBuilder;
5960
import io.swagger.transform.migrate.ApiDeclarationMigrator;
6061
import io.swagger.transform.migrate.ResourceListingMigrator;
6162
import io.swagger.util.Json;
63+
import org.apache.commons.io.FileUtils;
6264
import org.slf4j.Logger;
6365
import org.slf4j.LoggerFactory;
6466

6567
import java.io.File;
6668
import java.io.IOException;
6769
import java.math.BigDecimal;
70+
import java.net.URI;
71+
import java.nio.file.Files;
72+
import java.nio.file.Paths;
6873
import java.util.ArrayList;
6974
import java.util.HashMap;
7075
import java.util.List;
@@ -187,7 +192,22 @@ public ResourceListing readResourceListing(String input, MessageBuilder messages
187192
String json = RemoteUrl.urlToString(input, auths);
188193
jsonNode = Json.mapper().readTree(json);
189194
} else {
190-
jsonNode = Json.mapper().readTree(new File(input));
195+
final String fileScheme = "file:";
196+
java.nio.file.Path path;
197+
if (input.toLowerCase().startsWith(fileScheme)) {
198+
path = Paths.get(URI.create(input));
199+
} else {
200+
path = Paths.get(input);
201+
}
202+
String json;
203+
if (Files.exists(path)) {
204+
json= FileUtils.readFileToString(path.toFile(), "UTF-8");
205+
} else {
206+
json = ClasspathHelper.loadFileFromClasspath(input );
207+
}
208+
209+
jsonNode = Json.mapper().readTree(json);
210+
191211
}
192212
if (jsonNode.get("swaggerVersion") == null) {
193213
return null;
@@ -490,7 +510,21 @@ public ApiDeclaration readDeclaration(String input, MessageBuilder messages, Lis
490510
String json = RemoteUrl.urlToString(input, auths);
491511
jsonNode = Json.mapper().readTree(json);
492512
} else {
493-
jsonNode = Json.mapper().readTree(new java.io.File(input));
513+
final String fileScheme = "file:";
514+
java.nio.file.Path path;
515+
if (input.toLowerCase().startsWith(fileScheme)) {
516+
path = Paths.get(URI.create(input));
517+
} else {
518+
path = Paths.get(input);
519+
}
520+
String json;
521+
if (Files.exists(path)) {
522+
json= FileUtils.readFileToString(path.toFile(), "UTF-8");
523+
} else {
524+
json = ClasspathHelper.loadFileFromClasspath(input );
525+
}
526+
527+
jsonNode = Json.mapper().readTree(json);
494528
}
495529

496530
// this should be moved to a json patch
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.swagger.parserExtensions;
2+
3+
import io.swagger.models.Swagger;
4+
import io.swagger.parser.SwaggerCompatConverter;
5+
import org.testng.annotations.Test;
6+
7+
import java.io.IOException;
8+
9+
import static org.testng.Assert.assertTrue;
10+
11+
public class SwaggerCompatConverterTest {
12+
@Test
13+
public void loadsSpecFromClasspath() throws IOException {
14+
SwaggerCompatConverter converter = new SwaggerCompatConverter();
15+
Swagger result = converter.read("/specs/v1_2/singleFile.json");
16+
assertTrue(result != null, "Didn't load spec from classpath");
17+
}
18+
19+
@Test
20+
public void failsOnNonExistentSpec() throws IOException {
21+
SwaggerCompatConverter converter = new SwaggerCompatConverter();
22+
Swagger result = converter.read("specs/v1_2/not-exists.json");
23+
assertTrue(result == null);
24+
}
25+
}

0 commit comments

Comments
 (0)