Skip to content

Commit 4db76ba

Browse files
committed
Merge pull request #123 from tschaible/master
SwaggerDeserializer support for RefResponse
2 parents ec23ca6 + 93983a6 commit 4db76ba

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java

+16
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.fasterxml.jackson.databind.node.NumericNode;
3535
import com.fasterxml.jackson.databind.node.ObjectNode;
3636
import com.fasterxml.jackson.databind.node.TextNode;
37+
3738
import io.swagger.models.ArrayModel;
3839
import io.swagger.models.ComposedModel;
3940
import io.swagger.models.Contact;
@@ -46,6 +47,7 @@
4647
import io.swagger.models.Path;
4748
import io.swagger.models.RefModel;
4849
import io.swagger.models.RefPath;
50+
import io.swagger.models.RefResponse;
4951
import io.swagger.models.Response;
5052
import io.swagger.models.Scheme;
5153
import io.swagger.models.SecurityRequirement;
@@ -611,6 +613,10 @@ private Property schema(Map<String, Object> schemaItems, JsonNode obj, String lo
611613
public RefParameter refParameter(TextNode obj, String location, ParseResult result) {
612614
return new RefParameter(obj.asText());
613615
}
616+
617+
public RefResponse refResponse(TextNode obj, String location, ParseResult result) {
618+
return new RefResponse(obj.asText());
619+
}
614620

615621
public Path pathRef(TextNode ref, String location, ParseResult result) {
616622
RefPath output = new RefPath();
@@ -944,6 +950,16 @@ public Response response(ObjectNode node, String location, ParseResult result) {
944950
return null;
945951

946952
Response output = new Response();
953+
JsonNode ref = node.get("$ref");
954+
if(ref != null) {
955+
if(ref.getNodeType().equals(JsonNodeType.STRING)) {
956+
return refResponse((TextNode) ref, location, result);
957+
}
958+
else {
959+
result.invalidType(location, "$ref", "string", node);
960+
return null;
961+
}
962+
}
947963

948964
String value = getString("description", node, true, location, result);
949965
output.description(value);

modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java

+31
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,37 @@ public void testPaths() {
499499
assertTrue(scopes.contains("read:pets"));
500500
assertTrue(scopes.contains("write:pets"));
501501
}
502+
503+
@Test
504+
public void testPathsWithRefResponse() {
505+
String json = "{\n" +
506+
" \"swagger\": \"2.0\",\n" +
507+
" \"paths\": {\n" +
508+
" \"/pet\": {\n" +
509+
" \"get\": {\n" +
510+
" \"responses\": {\n" +
511+
" \"200\": {\n" +
512+
" \"$ref\": \"#/responses/OK\"" +
513+
" }\n" +
514+
" }\n" +
515+
" }\n" +
516+
" }\n" +
517+
" }\n" +
518+
"}";
519+
SwaggerParser parser = new SwaggerParser();
520+
521+
SwaggerDeserializationResult result = parser.readWithInfo(json);
522+
Swagger swagger = result.getSwagger();
523+
524+
Path path = swagger.getPath("/pet");
525+
assertNotNull(path);
526+
Operation operation = path.getGet();
527+
assertNotNull(operation);
528+
assertTrue(operation.getResponses().containsKey("200"));
529+
assertEquals(RefResponse.class,operation.getResponses().get("200").getClass());
530+
RefResponse refResponse = (RefResponse)operation.getResponses().get("200");
531+
assertEquals("#/responses/OK",refResponse.get$ref());
532+
}
502533

503534
@Test
504535
public void testArrayModelDefinition() {

0 commit comments

Comments
 (0)