From d2f5b9ea65dff008ea655b329536f3cfcfe16b00 Mon Sep 17 00:00:00 2001 From: Tony Tam Date: Wed, 25 Mar 2015 11:11:04 -0700 Subject: [PATCH] added recursion check --- .../codegen/examples/ExampleGenerator.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java index c03f15a1466..80063625440 100644 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/examples/ExampleGenerator.java @@ -24,6 +24,7 @@ public class ExampleGenerator { public List> generate(Map examples, List mediaTypes, Property property) { List> output = new ArrayList>(); + Set processedModels = new HashSet(); if(examples == null ) { if(mediaTypes == null) { // assume application/json for this @@ -33,7 +34,7 @@ public class ExampleGenerator { Map kv = new HashMap(); kv.put("contentType", mediaType); if(property != null && mediaType.startsWith("application/json")) { - String example = Json.pretty(resolvePropertyToExample(mediaType, property)); + String example = Json.pretty(resolvePropertyToExample(mediaType, property, processedModels)); if(example != null) { example = example.replaceAll("\n", "\\\\n"); @@ -69,7 +70,7 @@ public class ExampleGenerator { return output; } - protected Object resolvePropertyToExample(String mediaType, Property property) { + protected Object resolvePropertyToExample(String mediaType, Property property, Set processedModels) { if(property.getExample() != null) { return property.getExample(); } @@ -83,7 +84,7 @@ public class ExampleGenerator { Property innerType = ((ArrayProperty)property).getItems(); if(innerType != null) { Object[] output = new Object[]{ - resolvePropertyToExample(mediaType, innerType) + resolvePropertyToExample(mediaType, innerType, processedModels) }; return output; } @@ -116,11 +117,11 @@ public class ExampleGenerator { Map mp = new HashMap(); if(property.getName() != null) { mp.put(property.getName(), - resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties())); + resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties(), processedModels)); } else { mp.put("key", - resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties())); + resolvePropertyToExample(mediaType, ((MapProperty)property).getAdditionalProperties(), processedModels)); } return mp; } @@ -128,9 +129,10 @@ public class ExampleGenerator { return "{}"; } else if(property instanceof RefProperty) { - Model model = examples.get(((RefProperty)property).getSimpleRef()); + String simpleName = ((RefProperty)property).getSimpleRef(); + Model model = examples.get(simpleName); if(model != null) - return resolveModelToExample(mediaType, model); + return resolveModelToExample(simpleName, mediaType, model, processedModels); } else if(property instanceof UUIDProperty) { return "046b6c7f-0b8a-43b9-b35d-6489e6daee91"; @@ -139,14 +141,20 @@ public class ExampleGenerator { return ""; } - public Object resolveModelToExample(String mediaType, Model model) { + public Object resolveModelToExample(String name, String mediaType, Model model, Set processedModels) { + if(processedModels.contains(name)) { + return ""; + } if(model instanceof ModelImpl) { + processedModels.add(name); ModelImpl impl = (ModelImpl) model; Map values = new HashMap(); - for(String name : impl.getProperties().keySet()) { - Property property = impl.getProperties().get(name); - values.put(name, resolvePropertyToExample(mediaType, property)); + if(impl != null && impl.getProperties() != null) { + for(String propertyName : impl.getProperties().keySet()) { + Property property = impl.getProperties().get(propertyName); + values.put(propertyName, resolvePropertyToExample(mediaType, property, processedModels)); + } } return values;