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 @@ -113,9 +113,9 @@ private Swagger removeBrokenReferenceDefinitions (Swagger swagger) {

if (swagger.getResponses() != null) {
for (Response response: swagger.getResponses().values()) {
String propertyRef = getPropertyRef(response.getSchema());
if (propertyRef != null) {
referencedDefinitions.add(propertyRef);
Set<String> modelRef = getModelRef(response.getResponseSchema());
if (modelRef != null) {
referencedDefinitions.addAll(modelRef);
}
}
}
Expand Down Expand Up @@ -147,9 +147,9 @@ private Swagger removeBrokenReferenceDefinitions (Swagger swagger) {
for (Operation op: path.getOperations()) {
if (op.getResponses() != null) {
for (Response response: op.getResponses().values()) {
String propertyRef = getPropertyRef(response.getSchema());
if (propertyRef != null) {
referencedDefinitions.add(propertyRef);
Set<String> modelRef = getModelRef(response.getResponseSchema());
if (modelRef != null) {
referencedDefinitions.addAll(modelRef);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.swagger.jackson.mixin;

import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonSetter;
import io.swagger.models.Model;
import io.swagger.models.properties.Property;

public abstract class ResponseSchemaMixin {

@JsonIgnore
public abstract Property getSchema();

@JsonIgnore
public abstract void setSchema(Property schema);

@JsonGetter("schema")
public abstract Model getResponseSchema();

@JsonSetter("schema")
public abstract void setResponseSchema(Model schema);



}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import io.swagger.jackson.mixin.ResponseSchemaMixin;
import io.swagger.models.Response;




public class ObjectMapperFactory {
Expand Down Expand Up @@ -37,6 +41,8 @@ private static ObjectMapper create(JsonFactory jsonFactory, boolean includePathD
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

mapper.addMixIn(Response.class, ResponseSchemaMixin.class);

return mapper;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package io.swagger.properties;

import io.swagger.models.ArrayModel;
import io.swagger.models.Model;
import io.swagger.models.Operation;
import io.swagger.models.Response;
import io.swagger.models.properties.ArrayProperty;
Expand Down Expand Up @@ -34,13 +36,13 @@ public void testArrayDeserialization () throws Exception {
Response response = operation.getResponses().get("200");
assertNotNull(response);

Property responseSchema = response.getSchema();
Model responseSchema = response.getResponseSchema();
assertNotNull(responseSchema);
assertTrue(responseSchema instanceof ArrayProperty);
ArrayProperty mp = (ArrayProperty) responseSchema;
assertNotNull( mp.getExample() );
assertEquals(mp.getMinItems(), new Integer(3));
assertEquals(mp.getMaxItems(), new Integer(100));
assertTrue(responseSchema instanceof ArrayModel);

ArrayModel arrayModel = (ArrayModel) responseSchema;
assertNotNull( arrayModel.getExample() );
assertEquals(arrayModel.getMinItems(), new Integer(3));
assertEquals(arrayModel.getMaxItems(), new Integer(100));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.swagger.properties;

import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.matchers.SerializationMatchers;
import io.swagger.models.Model;
import io.swagger.models.ModelImpl;
import io.swagger.models.Operation;
import io.swagger.models.Response;
import io.swagger.models.properties.IntegerProperty;
Expand All @@ -10,6 +12,8 @@
import io.swagger.util.Yaml;
import org.testng.annotations.Test;

import java.util.LinkedHashMap;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
Expand Down Expand Up @@ -47,12 +51,12 @@ public void testMapDeserialization () throws Exception {
Response response = operation.getResponses().get("200");
assertNotNull(response);

Property responseSchema = response.getSchema();
Model responseSchema = response.getResponseSchema();
assertNotNull(responseSchema);
assertTrue(responseSchema instanceof MapProperty);
MapProperty mp = (MapProperty) responseSchema;
assertTrue(mp.getAdditionalProperties() instanceof IntegerProperty);
assertTrue(responseSchema instanceof ModelImpl);

ModelImpl modelImpl = (ModelImpl) responseSchema;
assertTrue(modelImpl.getAdditionalProperties() instanceof IntegerProperty);
}

@Test(description = "vendor extensions should be included with object type")
Expand All @@ -61,43 +65,47 @@ public void testMapDeserializationVendorExtensions () throws Exception {
Response response = operation.getResponses().get("200");
assertNotNull(response);

Property responseSchema = response.getSchema();
Model responseSchema = response.getResponseSchema();
assertNotNull(responseSchema);

MapProperty mp = (MapProperty) responseSchema;
assertTrue(mp.getVendorExtensions().size() > 0);
assertNotNull(mp.getVendorExtensions().get("x-foo"));
assertEquals(mp.getVendorExtensions().get("x-foo"), "vendor x");
ModelImpl modelImpl = (ModelImpl) responseSchema;
assertTrue(modelImpl.getVendorExtensions().size() > 0);
assertNotNull(modelImpl.getVendorExtensions().get("x-foo"));
assertEquals(modelImpl.getVendorExtensions().get("x-foo"), "vendor x");
}

@Test(description = "it should read an example within an inlined schema")
public void testIssue1261InlineSchemaExample() throws Exception {
Operation operation = Yaml.mapper().readValue(" produces:\n" +
" - application/json\n" +
" responses:\n" +
" 200:\n" +
" description: OK\n" +
" schema:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int32\n" +
" name:\n" +
" type: string\n" +
" required: [id, name]\n" +
" example:\n" +
" id: 42\n" +
" name: Arthur Dent\n", Operation.class);
String yaml = " produces:\n" +
" - application/json\n" +
" parameters:\n" +
" []\n" +
" responses:\n" +
" 200:\n" +
" description: OK\n" +
" schema:\n" +
" type: object\n" +
" properties:\n" +
" id:\n" +
" type: integer\n" +
" format: int32\n" +
" name:\n" +
" type: string\n" +
" required: [id, name]\n" +
" example:\n" +
" id: 42\n" +
" name: Arthur Dent\n";

Operation operation = Yaml.mapper().readValue(yaml, Operation.class);
Response response = operation.getResponses().get("200");
assertNotNull(response);
Property schema = response.getSchema();
Model schema = response.getResponseSchema();
Object example = schema.getExample();
assertNotNull(example);
assertTrue(example instanceof ObjectNode);
ObjectNode objectNode = (ObjectNode) example;
assertEquals(objectNode.get("id").intValue(), 42);
assertEquals(objectNode.get("name").textValue(), "Arthur Dent");
assertTrue(example instanceof LinkedHashMap);
LinkedHashMap exampleMap = (LinkedHashMap) example;
assertEquals(exampleMap.get("id"), 42);
assertEquals(exampleMap.get("name"), "Arthur Dent");
SerializationMatchers.assertEqualsToYaml(operation, yaml);
}
}
Loading