Skip to content

Commit 9cccf5c

Browse files
authored
Merge pull request #273 from diegode/issue270
Fixes issue 270
2 parents c854786 + e4a85bb commit 9cccf5c

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

modules/swagger-parser/src/main/java/io/swagger/parser/processors/ExternalRefProcessor.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.swagger.parser.processors;
22

33
import io.swagger.models.Model;
4+
import io.swagger.models.RefModel;
45
import io.swagger.models.Swagger;
56
import io.swagger.models.properties.Property;
67
import io.swagger.models.properties.RefProperty;
@@ -48,15 +49,27 @@ public String processRefToExternalDefinition(String $ref, RefFormat refFormat) {
4849

4950

5051
//If this is a new model, then check it for other sub references
52+
String file = $ref.split("#/")[0];
53+
if (model instanceof RefModel) {
54+
RefModel refModel = (RefModel) model;
55+
if(isAnExternalRefFormat(refModel.getRefFormat())) {
56+
refModel.set$ref(processRefToExternalDefinition(refModel.get$ref(), refModel.getRefFormat()));
57+
} else {
58+
processRefToExternalDefinition(file + refModel.get$ref(), RefFormat.RELATIVE);
59+
}
60+
}
5161
//Loop the properties and recursively call this method;
5262
Map<String, Property> subProps = model.getProperties();
5363
if(subProps != null) {
5464
for (Map.Entry<String, Property> prop : subProps.entrySet()) {
5565
if (prop.getValue() instanceof RefProperty) {
5666
RefProperty subRef = (RefProperty) prop.getValue();
5767

58-
if(isAnExternalRefFormat(subRef.getRefFormat()))
68+
if(isAnExternalRefFormat(subRef.getRefFormat())) {
5969
subRef.set$ref(processRefToExternalDefinition(subRef.get$ref(), subRef.getRefFormat()));
70+
} else {
71+
processRefToExternalDefinition(file + subRef.get$ref(), RefFormat.RELATIVE);
72+
}
6073
}
6174
}
6275
}

modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,17 @@ public void testLoadRelativeFileTree_Json() throws Exception {
139139
//Json.mapper().writerWithDefaultPrettyPrinter().writeValue(new File("resolved.json"), swagger);
140140
}
141141

142+
@Test
143+
public void testLoadExternalNestedDefinitions() throws Exception {
144+
SwaggerParser parser = new SwaggerParser();
145+
final Swagger swagger = parser.read("src/test/resources/nested-references/b.yaml");
146+
Map<String, Model> definitions = swagger.getDefinitions();
147+
assertTrue(definitions.containsKey("x"));
148+
assertTrue(!definitions.containsKey("y"));
149+
assertTrue(definitions.containsKey("z"));
150+
assertEquals(((RefModel) definitions.get("i")).get$ref(), "#/definitions/k");
151+
}
152+
142153
@Test
143154
public void testPetstore() throws Exception {
144155
SwaggerParser parser = new SwaggerParser();
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
swagger: "2.0"
3+
info:
4+
title: test
5+
version: '0.0.0'
6+
paths: {}
7+
definitions:
8+
y:
9+
$ref: "#/definitions/z"
10+
z:
11+
type: object
12+
properties:
13+
name:
14+
type: string
15+
j:
16+
$ref: "./b.yaml#/definitions/k"
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
swagger: "2.0"
3+
info:
4+
title: test
5+
version: '0.0.0'
6+
paths: {}
7+
definitions:
8+
x:
9+
$ref: "./a.yaml#/definitions/y"
10+
i:
11+
$ref: "./a.yaml#/definitions/j"
12+
k:
13+
type: object
14+
properties:
15+
name:
16+
type: string

0 commit comments

Comments
 (0)