Skip to content

Commit d2f5b9e

Browse files
committed
added recursion check
1 parent e8052f0 commit d2f5b9e

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public ExampleGenerator(Map<String, Model> examples) {
2424

2525
public List<Map<String, String>> generate(Map<String, String> examples, List<String> mediaTypes, Property property) {
2626
List<Map<String, String>> output = new ArrayList<Map<String, String>>();
27+
Set<String> processedModels = new HashSet<String>();
2728
if(examples == null ) {
2829
if(mediaTypes == null) {
2930
// assume application/json for this
@@ -33,7 +34,7 @@ public List<Map<String, String>> generate(Map<String, String> examples, List<Str
3334
Map<String, String> kv = new HashMap<String, String>();
3435
kv.put("contentType", mediaType);
3536
if(property != null && mediaType.startsWith("application/json")) {
36-
String example = Json.pretty(resolvePropertyToExample(mediaType, property));
37+
String example = Json.pretty(resolvePropertyToExample(mediaType, property, processedModels));
3738

3839
if(example != null) {
3940
example = example.replaceAll("\n", "\\\\n");
@@ -69,7 +70,7 @@ else if(property != null && mediaType.startsWith("application/xml")) {
6970
return output;
7071
}
7172

72-
protected Object resolvePropertyToExample(String mediaType, Property property) {
73+
protected Object resolvePropertyToExample(String mediaType, Property property, Set<String> processedModels) {
7374
if(property.getExample() != null) {
7475
return property.getExample();
7576
}
@@ -83,7 +84,7 @@ else if(property instanceof ArrayProperty) {
8384
Property innerType = ((ArrayProperty)property).getItems();
8485
if(innerType != null) {
8586
Object[] output = new Object[]{
86-
resolvePropertyToExample(mediaType, innerType)
87+
resolvePropertyToExample(mediaType, innerType, processedModels)
8788
};
8889
return output;
8990
}
@@ -116,21 +117,22 @@ else if(property instanceof MapProperty) {
116117
Map<String, Object> mp = new HashMap<String, Object>();
117118
if(property.getName() != null) {
118119
mp.put(property.getName(),
119-
resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties()));
120+
resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties(), processedModels));
120121
}
121122
else {
122123
mp.put("key",
123-
resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties()));
124+
resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties(), processedModels));
124125
}
125126
return mp;
126127
}
127128
else if(property instanceof ObjectProperty) {
128129
return "{}";
129130
}
130131
else if(property instanceof RefProperty) {
131-
Model model = examples.get(((RefProperty)property).getSimpleRef());
132+
String simpleName = ((RefProperty)property).getSimpleRef();
133+
Model model = examples.get(simpleName);
132134
if(model != null)
133-
return resolveModelToExample(mediaType, model);
135+
return resolveModelToExample(simpleName, mediaType, model, processedModels);
134136
}
135137
else if(property instanceof UUIDProperty) {
136138
return "046b6c7f-0b8a-43b9-b35d-6489e6daee91";
@@ -139,14 +141,20 @@ else if(property instanceof UUIDProperty) {
139141
return "";
140142
}
141143

142-
public Object resolveModelToExample(String mediaType, Model model) {
144+
public Object resolveModelToExample(String name, String mediaType, Model model, Set<String> processedModels) {
145+
if(processedModels.contains(name)) {
146+
return "";
147+
}
143148
if(model instanceof ModelImpl) {
149+
processedModels.add(name);
144150
ModelImpl impl = (ModelImpl) model;
145151
Map<String, Object> values = new HashMap<String, Object>();
146152

147-
for(String name : impl.getProperties().keySet()) {
148-
Property property = impl.getProperties().get(name);
149-
values.put(name, resolvePropertyToExample(mediaType, property));
153+
if(impl != null && impl.getProperties() != null) {
154+
for(String propertyName : impl.getProperties().keySet()) {
155+
Property property = impl.getProperties().get(propertyName);
156+
values.put(propertyName, resolvePropertyToExample(mediaType, property, processedModels));
157+
}
150158
}
151159

152160
return values;

0 commit comments

Comments
 (0)