Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,37 @@ public String processRefToExternalDefinition(String $ref, RefFormat refFormat) {
}


public void processRefToExternalResponse(String $ref, RefFormat refFormat) {
public String processRefToExternalResponse(String $ref, RefFormat refFormat) {

String renamedRef = cache.getRenamedRef($ref);
if(renamedRef != null) {
return renamedRef;
}
final Response response = cache.loadRef($ref, refFormat, Response.class);

String newRef;


Map<String, Response> responses = swagger.getResponses();

if (responses == null) {
responses = new LinkedHashMap<>();
}

final String possiblyConflictingDefinitionName = computeDefinitionName($ref);

Response existingResponse = responses.get(possiblyConflictingDefinitionName);

if (existingResponse != null) {
LOGGER.debug("A model for " + existingResponse + " already exists");
if(existingResponse instanceof RefResponse) {
// use the new model
existingResponse = null;
}
}
newRef = possiblyConflictingDefinitionName;
cache.putRenamedRef($ref, newRef);

if(response != null) {

String file = $ref.split("#/")[0];
Expand All @@ -176,6 +203,7 @@ public void processRefToExternalResponse(String $ref, RefFormat refFormat) {
}
}
}
return newRef;
}

private void processProperties(final Map<String, Property> subProps, final String file) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,39 @@

public class SwaggerParserTest {

@Test
public void testIssue834() {
Swagger swagger = new SwaggerParser().read("issue-834/index.yaml", null, true);
assertNotNull(swagger);

Response foo200 =swagger.getPaths().get("/foo").getGet().getResponses().get("200");
assertNotNull(foo200);
RefModel model200 = (RefModel) foo200.getResponseSchema();
String foo200SchemaRef = model200.get$ref();
assertEquals(foo200SchemaRef, "#/definitions/schema");

Response foo300 = swagger.getPaths().get("/foo").getGet().getResponses().get("300");
assertNotNull(foo300);
RefModel model300 = (RefModel) foo300.getResponseSchema();
String foo300SchemaRef = model300.get$ref();
assertEquals(foo300SchemaRef, "#/definitions/schema");

Response bar200 = swagger.getPaths().get("/bar").getGet().getResponses().get("200");
assertNotNull(bar200);
RefModel modelBar200 = (RefModel) bar200.getResponseSchema();
String bar200SchemaRef = modelBar200.get$ref();
assertEquals(bar200SchemaRef, "#/definitions/schema");
}

@Test
public void testIssue811_RefSchema_ToRefSchema() {
final Swagger swagger = new SwaggerParser().read("oapi-reference-test2/index.yaml", null, true);
Assert.assertNotNull(swagger);
RefModel model = (RefModel) swagger.getPaths().get("/").getGet().getResponses().get("200").getResponseSchema();
Assert.assertEquals(model.get$ref() ,"#/definitions/schema-with-reference");
}


@Test
public void testIssue811() throws Exception {
SwaggerParser parser = new SwaggerParser();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
description: Response with schema containing reference
schema:
$ref: "./schema.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
description: Response with schema containing reference
schema:
$ref: "./schema.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
type: object
30 changes: 30 additions & 0 deletions modules/swagger-parser/src/test/resources/issue-834/index.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
swagger: "2.0"
externalDocs:
description: Test
url: http://test.com/test
info:
version: 0.0.1
title: Test
license:
name: Test
url: http://test.com/test
paths:
/foo:
get:
description: foo
summary: foo
operationId: foo
responses:
200:
$ref: "./components/response1.yaml"
300:
$ref: "./components/response2.yaml"
/bar:
get:
description: bar
summary: bar
operationId: bar
responses:
200:
$ref: "./components/response1.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
type: object
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: object
properties:
reference_array:
type: array
items:
$ref: "./referent.yaml"
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
swagger: "2.0"
externalDocs:
description: Test
url: http://test.com/test
info:
version: 0.0.1
title: Test
license:
name: Test
url: http://test.com/test
paths:
/:
get:
description: Test
summary: Test
operationId: getTest
responses:
200:
description: Response with schema containing reference
schema:
$ref: "./components/schema-with-reference.yaml"