Skip to content

Commit b4b9282

Browse files
authored
Merge pull request #2835 from swagger-api/responses-extensions-OAS2
Adding Extensions in Responses (OAS2)
2 parents 68d8974 + 206a9e0 commit b4b9282

File tree

20 files changed

+251
-94
lines changed

20 files changed

+251
-94
lines changed

modules/swagger-core/src/main/java/io/swagger/core/filter/SpecFilter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ private Swagger removeBrokenReferenceDefinitions (Swagger swagger) {
150150
}
151151
if (path.getOperations() != null) {
152152
for (Operation op: path.getOperations()) {
153-
if (op.getResponses() != null) {
154-
for (Response response: op.getResponses().values()) {
153+
if (op.getResponsesObject() != null) {
154+
for (Response response: op.getResponsesObject().values()) {
155155
Set<String> modelRef = getModelRef(response.getResponseSchema());
156156
if (modelRef != null) {
157157
referencedDefinitions.addAll(modelRef);
@@ -280,7 +280,7 @@ public Operation filterOperation(SwaggerSpecFilter filter, Operation op, ApiDesc
280280
}
281281
clonedOperation.setParameters(clonedParams);
282282
clonedOperation.setSecurity(op.getSecurity());
283-
clonedOperation.setResponses(op.getResponses());
283+
clonedOperation.setResponsesObject(op.getResponsesObject());
284284

285285
return clonedOperation;
286286
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.swagger.jackson.mixin;
2+
3+
import com.fasterxml.jackson.annotation.JsonGetter;
4+
import com.fasterxml.jackson.annotation.JsonIgnore;
5+
import com.fasterxml.jackson.annotation.JsonSetter;
6+
import io.swagger.models.Response;
7+
import io.swagger.models.Responses;
8+
9+
10+
import java.util.Map;
11+
12+
public abstract class OperationResponseMixin {
13+
14+
@JsonIgnore
15+
public abstract Map<String,Response> getResponses();
16+
17+
@JsonIgnore
18+
public abstract void setResponses(Map<String,Response> responses);
19+
20+
@JsonGetter("responses")
21+
public abstract Responses getResponsesObject();
22+
23+
@JsonSetter("responses")
24+
public abstract void getResponsesObject(Responses responsesObject);
25+
26+
27+
28+
}

modules/swagger-core/src/main/java/io/swagger/util/ObjectMapperFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import com.fasterxml.jackson.databind.ObjectMapper;
88
import com.fasterxml.jackson.databind.SerializationFeature;
99
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
10+
import io.swagger.jackson.mixin.OperationResponseMixin;
1011
import io.swagger.jackson.mixin.ResponseSchemaMixin;
12+
import io.swagger.models.Operation;
1113
import io.swagger.models.Response;
1214

1315
public class ObjectMapperFactory {
@@ -39,6 +41,7 @@ private static ObjectMapper create(JsonFactory jsonFactory, boolean includePathD
3941
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
4042

4143
mapper.addMixIn(Response.class, ResponseSchemaMixin.class);
44+
mapper.addMixIn(Operation.class, OperationResponseMixin.class);
4245

4346
ReferenceSerializationConfigurer.serializeAsComputedRef(mapper);
4447

modules/swagger-core/src/test/java/io/swagger/properties/ArrayPropertyDeserializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class ArrayPropertyDeserializerTest {
3333
public void testArrayDeserialization () throws Exception {
3434

3535
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
36-
Response response = operation.getResponses().get("200");
36+
Response response = operation.getResponsesObject().get("200");
3737
assertNotNull(response);
3838

3939
Model responseSchema = response.getResponseSchema();

modules/swagger-core/src/test/java/io/swagger/properties/MapPropertyDeserializerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class MapPropertyDeserializerTest {
4848
public void testMapDeserialization () throws Exception {
4949

5050
Operation operation = Json.mapper().readValue(json, Operation.class);
51-
Response response = operation.getResponses().get("200");
51+
Response response = operation.getResponsesObject().get("200");
5252
assertNotNull(response);
5353

5454
Model responseSchema = response.getResponseSchema();
@@ -62,7 +62,7 @@ public void testMapDeserialization () throws Exception {
6262
@Test(description = "vendor extensions should be included with object type")
6363
public void testMapDeserializationVendorExtensions () throws Exception {
6464
Operation operation = Json.mapper().readValue(json, Operation.class);
65-
Response response = operation.getResponses().get("200");
65+
Response response = operation.getResponsesObject().get("200");
6666
assertNotNull(response);
6767

6868
Model responseSchema = response.getResponseSchema();
@@ -97,7 +97,7 @@ public void testIssue1261InlineSchemaExample() throws Exception {
9797
" name: Arthur Dent\n";
9898

9999
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
100-
Response response = operation.getResponses().get("200");
100+
Response response = operation.getResponsesObject().get("200");
101101
assertNotNull(response);
102102
Model schema = response.getResponseSchema();
103103
Object example = schema.getExample();

modules/swagger-core/src/test/java/io/swagger/util/JsonDeserializationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void testDeserializeAPathRef() throws Exception {
4242
public void testDeserializeAResponseRef() throws Exception {
4343
final Swagger swagger = TestUtils.deserializeJsonFileFromClasspath("specFiles/responseRef.json", Swagger.class);
4444

45-
final Map<String, Response> responseMap = swagger.getPath("/pet").getPut().getResponses();
45+
final Map<String, Response> responseMap = swagger.getPath("/pet").getPut().getResponsesObject();
4646

4747
assertIsRefResponse(responseMap.get("405"), "http://my.company.com/responses/errors.json#/method-not-allowed");
4848
assertIsRefResponse(responseMap.get("404"), "http://my.company.com/responses/errors.json#/not-found");

modules/swagger-core/src/test/java/io/swagger/util/JsonSerializationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void testSerializeASpecWithResponseReferences() throws Exception {
4343
String swaggerJson = Json.mapper().writeValueAsString(swagger);
4444
Swagger rebuilt = Json.mapper().readValue(swaggerJson, Swagger.class);
4545

46-
assertEquals(rebuilt.getPath("/health").getGet().getResponses().get("200"), expectedResponse);
46+
assertEquals(rebuilt.getPath("/health").getGet().getResponsesObject().get("200"), expectedResponse);
4747

4848
}
4949

modules/swagger-core/src/test/java/io/swagger/util/PropertyModelConverterTest.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void convertToUUIDProperty()throws Exception{
4040
" format: uuid\n";
4141

4242
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
43-
Response response = operation.getResponses().get("200");
43+
Response response = operation.getResponsesObject().get("200");
4444
Assert.assertNotNull(response);
4545
Property property = response.getSchema();
4646

@@ -63,7 +63,7 @@ public void convertToEmailProperty()throws Exception{
6363
" format: email\n";
6464

6565
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
66-
Response response = operation.getResponses().get("200");
66+
Response response = operation.getResponsesObject().get("200");
6767
Assert.assertNotNull(response);
6868
Property property = response.getSchema();
6969

@@ -85,7 +85,7 @@ public void convertToBooleanProperty()throws Exception{
8585
" type: boolean\n";
8686

8787
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
88-
Response response = operation.getResponses().get("200");
88+
Response response = operation.getResponsesObject().get("200");
8989
Assert.assertNotNull(response);
9090
Property property = response.getSchema();
9191

@@ -107,7 +107,7 @@ public void convertToDateProperty()throws Exception{
107107
" format: date\n";
108108

109109
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
110-
Response response = operation.getResponses().get("200");
110+
Response response = operation.getResponsesObject().get("200");
111111
Assert.assertNotNull(response);
112112
Property property = response.getSchema();
113113

@@ -130,7 +130,7 @@ public void convertToDateTimeProperty()throws Exception{
130130
" format: date-time\n";
131131

132132
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
133-
Response response = operation.getResponses().get("200");
133+
Response response = operation.getResponsesObject().get("200");
134134
Assert.assertNotNull(response);
135135
Property property = response.getSchema();
136136

@@ -153,7 +153,7 @@ public void convertToStringProperty()throws Exception{
153153
" format: password\n";
154154

155155
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
156-
Response response = operation.getResponses().get("200");
156+
Response response = operation.getResponsesObject().get("200");
157157
Assert.assertNotNull(response);
158158
Property property = response.getSchema();
159159

@@ -178,7 +178,7 @@ public void convertToStringWithEnumProperty()throws Exception{
178178
" - b\n";
179179

180180
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
181-
Response response = operation.getResponses().get("200");
181+
Response response = operation.getResponsesObject().get("200");
182182
Assert.assertNotNull(response);
183183
Property property = response.getSchema();
184184

@@ -202,7 +202,7 @@ public void convertToStringNewProperty()throws Exception{
202202
" pattern: Pattern\n";
203203

204204
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
205-
Response response = operation.getResponses().get("200");
205+
Response response = operation.getResponsesObject().get("200");
206206
Assert.assertNotNull(response);
207207
Property property = response.getSchema();
208208

@@ -226,7 +226,7 @@ public void convertToBinaryProperty()throws Exception{
226226
" format: binary\n";
227227

228228
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
229-
Response response = operation.getResponses().get("200");
229+
Response response = operation.getResponsesObject().get("200");
230230
Assert.assertNotNull(response);
231231
Property property = response.getSchema();
232232

@@ -249,7 +249,7 @@ public void convertToDoubleProperty()throws Exception{
249249
" format: double\n";
250250

251251
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
252-
Response response = operation.getResponses().get("200");
252+
Response response = operation.getResponsesObject().get("200");
253253
Assert.assertNotNull(response);
254254
Property property = response.getSchema();
255255

@@ -274,7 +274,7 @@ public void convertToNumericNewProperties()throws Exception{
274274
" format: double\n";
275275

276276
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
277-
Response response = operation.getResponses().get("200");
277+
Response response = operation.getResponsesObject().get("200");
278278
Assert.assertNotNull(response);
279279
Property property = response.getSchema();
280280

@@ -299,7 +299,7 @@ public void convertToByteArrayProperty()throws Exception{
299299
" format: byte\n";
300300

301301
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
302-
Response response = operation.getResponses().get("200");
302+
Response response = operation.getResponsesObject().get("200");
303303
Assert.assertNotNull(response);
304304
Property property = response.getSchema();
305305

@@ -322,7 +322,7 @@ public void convertToLongProperty()throws Exception{
322322
" format: int64\n";
323323

324324
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
325-
Response response = operation.getResponses().get("200");
325+
Response response = operation.getResponsesObject().get("200");
326326
Assert.assertNotNull(response);
327327
Property property = response.getSchema();
328328

@@ -345,7 +345,7 @@ public void convertToIntegerProperty()throws Exception{
345345
" format: int32\n";
346346

347347
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
348-
Response response = operation.getResponses().get("200");
348+
Response response = operation.getResponsesObject().get("200");
349349
Assert.assertNotNull(response);
350350
Property property = response.getSchema();
351351

@@ -371,7 +371,7 @@ public void convertToArrayProperty()throws Exception{
371371
" example: 1985-04-12T23:20:50.52Z";
372372

373373
Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
374-
Response response = operation.getResponses().get("200");
374+
Response response = operation.getResponsesObject().get("200");
375375
Assert.assertNotNull(response);
376376
Property property = response.getSchema();
377377

@@ -596,7 +596,7 @@ public void convertStringProperty()throws Exception{
596596

597597
Path string = swagger.getPaths().get("/string");
598598
Operation operation = string.getOperations().get(0);
599-
Response response = operation.getResponses().get("200");
599+
Response response = operation.getResponsesObject().get("200");
600600
Property property = response.getSchema();
601601

602602
PropertyModelConverter converter = new PropertyModelConverter();
@@ -619,7 +619,7 @@ public void convertStringPropertyWithEnum()throws Exception{
619619

620620
Path string = swagger.getPaths().get("/stringenum");
621621
Operation operation = string.getOperations().get(0);
622-
Response response = operation.getResponses().get("200");
622+
Response response = operation.getResponsesObject().get("200");
623623
Property property = response.getSchema();
624624

625625
Assert.assertEquals(((StringProperty)property).getEnum().size(),2);
@@ -645,7 +645,7 @@ public void convertStringRefProperty()throws Exception{
645645

646646
Path string = swagger.getPaths().get("/stringRef");
647647
Operation operation = string.getOperations().get(0);
648-
Response response = operation.getResponses().get("200");
648+
Response response = operation.getResponsesObject().get("200");
649649
Property property = response.getSchema();
650650

651651
PropertyModelConverter converter = new PropertyModelConverter();
@@ -667,7 +667,7 @@ public void convertBooleanProperty()throws Exception{
667667

668668
Path string = swagger.getPaths().get("/boolean");
669669
Operation operation = string.getOperations().get(0);
670-
Response response = operation.getResponses().get("200");
670+
Response response = operation.getResponsesObject().get("200");
671671
Property property = response.getSchema();
672672

673673
PropertyModelConverter converter = new PropertyModelConverter();
@@ -690,7 +690,7 @@ public void convertNumberProperty()throws Exception{
690690

691691
Path string = swagger.getPaths().get("/number");
692692
Operation operation = string.getOperations().get(0);
693-
Response response = operation.getResponses().get("200");
693+
Response response = operation.getResponsesObject().get("200");
694694
Property property = response.getSchema();
695695

696696
PropertyModelConverter converter = new PropertyModelConverter();
@@ -713,7 +713,7 @@ public void convertArrayProperty()throws Exception{
713713

714714
Path string = swagger.getPaths().get("/arrayOfInt");
715715
Operation operation = string.getOperations().get(0);
716-
Response response = operation.getResponses().get("200");
716+
Response response = operation.getResponsesObject().get("200");
717717
Property property = response.getSchema();
718718

719719
PropertyModelConverter converter = new PropertyModelConverter();
@@ -736,7 +736,7 @@ public void convertArrayOfRefProperty()throws Exception{
736736

737737
Path string = swagger.getPaths().get("/arrayOfRef");
738738
Operation operation = string.getOperations().get(0);
739-
Response response = operation.getResponses().get("200");
739+
Response response = operation.getResponsesObject().get("200");
740740
Property property = response.getSchema();
741741

742742
PropertyModelConverter converter = new PropertyModelConverter();
@@ -761,7 +761,7 @@ public void convertArrayRefProperty()throws Exception{
761761

762762
Path string = swagger.getPaths().get("/arrayRef");
763763
Operation operation = string.getOperations().get(0);
764-
Response response = operation.getResponses().get("200");
764+
Response response = operation.getResponsesObject().get("200");
765765
Property property = response.getSchema();
766766

767767
PropertyModelConverter converter = new PropertyModelConverter();
@@ -783,7 +783,7 @@ public void convertObjectProperty()throws Exception{
783783

784784
Path string = swagger.getPaths().get("/object");
785785
Operation operation = string.getOperations().get(0);
786-
Response response = operation.getResponses().get("200");
786+
Response response = operation.getResponsesObject().get("200");
787787
Property property = response.getSchema();
788788

789789
PropertyModelConverter converter = new PropertyModelConverter();

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/Reader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ private Operation parseMethod(Class<?> cls, Method method, AnnotatedMethod annot
911911
// merge class level @ApiResponse
912912
for (ApiResponse apiResponse : classApiResponses) {
913913
String key = (apiResponse.code() == 0) ? "default" : String.valueOf(apiResponse.code());
914-
if (operation.getResponses() != null && operation.getResponses().containsKey(key)) {
914+
if (operation.getResponsesObject() != null && operation.getResponsesObject().containsKey(key)) {
915915
continue;
916916
}
917917
addResponse(operation, apiResponse, jsonViewAnnotation);
@@ -949,7 +949,7 @@ private Operation parseMethod(Class<?> cls, Method method, AnnotatedMethod annot
949949
}
950950
}
951951

952-
if (operation.getResponses() == null) {
952+
if (operation.getResponsesObject() == null) {
953953
Response response = new Response().description(SUCCESSFUL_OPERATION);
954954
operation.defaultResponse(response);
955955
}

modules/swagger-jaxrs/src/test/java/io/swagger/ChildTypeTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ private BodyParameter getBodyParameter(Operation op, int index) {
2626
@Test(description = "Tests child type response schema ref is correctly set up")
2727
public void testChildTypeResponse() {
2828
Operation op = swagger.getPath("/childType/testChildTypeResponse").getGet();
29-
Model schema = op.getResponses().get("200").getResponseSchema();
29+
Model schema = op.getResponsesObject().get("200").getResponseSchema();
3030
assertEquals(schema.getClass().getName(), RefModel.class.getName());
3131
assertEquals(((RefModel) schema).getSimpleRef(), "Sub1Bean");
3232
}
3333

3434
@Test(description = "Tests child type response schema ref is correctly set up when specified on the operation")
3535
public void testChildTypeResponseOnOperation() {
3636
Operation op = swagger.getPath("/childType/testChildTypeResponseOnOperation").getGet();
37-
Model schema = op.getResponses().get("200").getResponseSchema();
37+
Model schema = op.getResponsesObject().get("200").getResponseSchema();
3838
assertEquals(schema.getClass().getName(), RefModel.class.getName());
3939
assertEquals(((RefModel) schema).getSimpleRef(), "Sub1Bean");
4040
}

0 commit comments

Comments
 (0)