Skip to content

Commit 819bb20

Browse files
committed
Properly resolve a inner model with a self reference.
1 parent 0dc2efb commit 819bb20

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

modules/swagger-core/src/main/java/io/swagger/converter/ModelConverterContextImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ public void defineModel(String name, Model model) {
4949
}
5050

5151
@Override
52-
public void defineModel(String name, Model model, Type type, String oldName) {
52+
public void defineModel(String name, Model model, Type type, String prevName) {
5353
if (LOGGER.isDebugEnabled()) {
5454
LOGGER.debug(String.format("defineModel %s %s", name, model));
5555
}
5656
modelByName.put(name, model);
5757

58-
if(StringUtils.isNotBlank(oldName)) {
59-
modelByName.remove(oldName);
58+
if(StringUtils.isNotBlank(prevName)) {
59+
modelByName.remove(prevName);
6060
}
6161

6262
if(type != null) {

modules/swagger-core/src/main/java/io/swagger/jackson/ModelResolver.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,11 @@ public Model resolve(JavaType type, ModelConverterContext context, Iterator<Mode
190190

191191
final ModelImpl model = new ModelImpl().type(ModelImpl.OBJECT).name(name)
192192
.description(_description(beanDesc.getClassInfo()));
193-
context.defineModel(name,model,type,null);
193+
194+
if(!type.isContainerType()) {
195+
// define the model here to support self/cyclic referencing of models
196+
context.defineModel(name, model, type, null);
197+
}
194198

195199
if (type.isContainerType()) {
196200
// We treat collections as primitive types, just need to add models for values (if any)

modules/swagger-jaxrs/src/test/scala/SimpleScannerTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ class SimpleScannerTest extends FlatSpec with Matchers {
306306
schema.getType() should be("integer")
307307
schema.getFormat() should be("int32")
308308

309-
swagger.getDefinitions().keySet().asScala should be(Set("Tag","Array"))
309+
swagger.getDefinitions().keySet().asScala should be(Set("Tag"))
310310

311311
def testParam(path: String, name: String, description: String): Model = {
312312
val param = swagger.getPath(path).getPost().getParameters().get(0).asInstanceOf[BodyParameter]
@@ -362,7 +362,7 @@ class SimpleScannerTest extends FlatSpec with Matchers {
362362

363363
it should "check response models processing" in {
364364
val swagger = new Reader(new Swagger()).read(classOf[ResourceWithTypedResponses])
365-
swagger.getDefinitions.keySet().asScala should be(Set("Map","Tag","List"))
365+
swagger.getDefinitions.keySet().asScala should be(Set("Tag"))
366366
for ((key, path) <- swagger.getPaths.asScala) {
367367
key.substring(key.lastIndexOf("/") + 1) match {
368368
case "testPrimitiveResponses" =>

0 commit comments

Comments
 (0)