Skip to content

Commit 076189a

Browse files
committed
fixing relative ref handling issue#727 - issue#713
1 parent fb1a54c commit 076189a

File tree

5 files changed

+43
-14
lines changed

5 files changed

+43
-14
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ public String processRefToExternalDefinition(String $ref, RefFormat refFormat) {
107107
if (isAnExternalRefFormat(refModel.getRefFormat())) {
108108
String joinedRef = join(file, refModel.get$ref());
109109
refModel.set$ref(processRefToExternalDefinition(joinedRef, refModel.getRefFormat()));
110-
} else {
110+
}else if (isAnExternalRefFormat(refModel.getOriginalRefFormat())) {
111+
String joinedRef = join(file, refModel.getOriginalRef());
112+
refModel.set$ref(processRefToExternalDefinition(joinedRef, refModel.getOriginalRefFormat()));
113+
}else {
111114
processRefToExternalDefinition(file + refModel.get$ref(), RefFormat.RELATIVE);
112115
}
113116
} else if (allOfModel instanceof ModelImpl) {
@@ -180,6 +183,9 @@ private void processRefProperty(RefProperty subRef, String externalFile) {
180183
if (isAnExternalRefFormat(subRef.getRefFormat())) {
181184
String joinedRef = join(externalFile, subRef.get$ref());
182185
subRef.set$ref(processRefToExternalDefinition(joinedRef, subRef.getRefFormat()));
186+
} else if (isAnExternalRefFormat(subRef.getOriginalRefFormat())) {
187+
String joinedRef = join(externalFile, subRef.getOriginalRef());
188+
subRef.set$ref(processRefToExternalDefinition(joinedRef, subRef.getOriginalRefFormat()));
183189
} else {
184190
processRefToExternalDefinition(externalFile + subRef.get$ref(), RefFormat.RELATIVE);
185191
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,19 @@ private void processRefModel(RefModel refModel) {
8787
2) shove it into the #/definitions
8888
3) update the RefModel to point to its location in #/definitions
8989
*/
90+
String newRef = null;
9091

9192
if (isAnExternalRefFormat(refModel.getRefFormat())) {
9293

93-
final String newRef = externalRefProcessor.processRefToExternalDefinition(refModel.get$ref(), refModel.getRefFormat());
94+
newRef = externalRefProcessor.processRefToExternalDefinition(refModel.get$ref(), refModel.getRefFormat());
9495

95-
if (newRef != null) {
96-
refModel.set$ref(newRef);
97-
}
96+
}else if (isAnExternalRefFormat(refModel.getOriginalRefFormat())) {
97+
98+
newRef = externalRefProcessor.processRefToExternalDefinition(refModel.getOriginalRef(), refModel.getOriginalRefFormat());
99+
}
100+
101+
if (newRef != null) {
102+
refModel.set$ref(newRef);
98103
}
99104

100105
}

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,15 @@ public List<Parameter> processParameters(List<Parameter> parameters) {
3434
for (Parameter parameter : parameters) {
3535
if (parameter instanceof RefParameter) {
3636
RefParameter refParameter = (RefParameter) parameter;
37-
final Parameter resolvedParameter = cache.loadRef(refParameter.get$ref(), refParameter.getRefFormat(), Parameter.class);
37+
Parameter resolvedParameter = cache.loadRef(refParameter.get$ref(), refParameter.getRefFormat(), Parameter.class);
3838

3939
if(resolvedParameter == null) {
40-
// can't resolve it!
41-
processedPathLevelParameters.add(refParameter);
42-
continue;
40+
resolvedParameter = cache.loadRef(refParameter.getOriginalRef(), refParameter.getOriginalRefFormat(), Parameter.class);
41+
if (resolvedParameter == null) {
42+
// can't resolve it!
43+
processedPathLevelParameters.add(refParameter);
44+
continue;
45+
}
4346
}
4447
// if the parameter exists, replace it
4548
boolean matched = false;

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,17 @@ public void processPaths() {
7777
if (path instanceof RefPath) {
7878
RefPath refPath = (RefPath) path;
7979
Path resolvedPath = cache.loadRef(refPath.get$ref(), refPath.getRefFormat(), Path.class);
80+
if (resolvedPath == null){
81+
resolvedPath = cache.loadRef(refPath.getOriginalRef(), refPath.getOriginalRefFormat(), Path.class);
82+
}
8083

8184
// TODO: update references to the parent location
8285

8386
String pathRef = refPath.get$ref().split("#")[0];
84-
updateLocalRefs(resolvedPath, pathRef);
87+
8588

8689
if (resolvedPath != null) {
90+
updateLocalRefs(resolvedPath, pathRef);
8791
//we need to put the resolved path into swagger object
8892
swagger.path(pathStr, resolvedPath);
8993
path = resolvedPath;
@@ -145,7 +149,9 @@ protected void updateLocalRefs(Model model, String pathRef) {
145149
RefModel refModel = (RefModel) model;
146150
if(isLocalRef(refModel.get$ref())) {
147151
refModel.set$ref(computeLocalRef(refModel.get$ref(), pathRef));
148-
}
152+
}/*else if(isLocalRef(refModel.getOriginalRef())) {
153+
refModel.set$ref(computeLocalRef(refModel.getOriginalRef(), pathRef));
154+
}*/
149155
}
150156
else if(model instanceof ModelImpl) {
151157
// process properties
@@ -175,7 +181,9 @@ protected void updateLocalRefs(Property property, String pathRef) {
175181
RefProperty ref = (RefProperty) property;
176182
if(isLocalRef(ref.get$ref())) {
177183
ref.set$ref(computeLocalRef(ref.get$ref(), pathRef));
178-
}
184+
}/*else if(isLocalRef(ref.getOriginalRef())) {
185+
ref.set$ref(computeLocalRef(ref.getOriginalRef(), pathRef));
186+
}*/
179187
}
180188
}
181189

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void testIssue306() {
2828

2929
Swagger swagger = result.getSwagger();
3030

31-
assertTrue(swagger.getDefinitions().size() == 6);
31+
assertTrue(swagger.getDefinitions().size() == 5);
3232
// resolved from `$ref: './book.yaml'`
3333
assertNotNull(swagger.getDefinitions().get("Inventory"));
3434
// resolved from `$ref: 'book.yaml'`
@@ -169,7 +169,13 @@ public void testAllOfFlatAndNested() {
169169
"./src/test/resources/allOf-properties-ext-ref/swagger.json")) {
170170
Swagger swagger = new SwaggerParser().read(path);
171171
assertEquals(3, swagger.getDefinitions().size());
172-
ComposedModel composedModel = (ComposedModel)swagger.getDefinitions().get("record");
172+
assertNotNull(swagger.getDefinitions().get("record"));
173+
assertTrue(swagger.getDefinitions().get("record")instanceof RefModel);
174+
175+
assertNotNull(swagger.getDefinitions().get("purebred_pet"));
176+
assertTrue(swagger.getDefinitions().get("purebred_pet")instanceof ComposedModel);
177+
ComposedModel composedModel = (ComposedModel) swagger.getDefinitions().get("purebred_pet");
178+
173179
assertEquals(((RefModel) composedModel.getParent()).getSimpleRef(), "pet");
174180
Map<String, Property> props = composedModel.getChild().getProperties();
175181
assertEquals(((RefProperty) props.get("mother")).getSimpleRef(), "pet");
@@ -187,6 +193,7 @@ public void testIssue421() {
187193
assertNotNull(swagger.getPath("/pet/{petId}").getGet());
188194
assertNotNull(swagger.getPath("/pet/{petId}").getGet().getParameters());
189195
assertTrue(swagger.getPath("/pet/{petId}").getGet().getParameters().size() == 1);
196+
Yaml.prettyPrint(swagger.getPaths());
190197
assertTrue(swagger.getPath("/pet/{petId}").getGet().getParameters().get(0).getName().equals("petId"));
191198
assertTrue(swagger.getDefinitions().get("Pet") instanceof ModelImpl);
192199
assertTrue(swagger.getDefinitions().get("Pet").getProperties().size() == 6);

0 commit comments

Comments
 (0)