Skip to content

Commit 4732e48

Browse files
rozzamozzafrantuma
authored andcommitted
refs #3348 - clone all resolved properties
1 parent b4ab414 commit 4732e48

File tree

2 files changed

+55
-10
lines changed

2 files changed

+55
-10
lines changed

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -638,19 +638,10 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
638638
//return context.resolve(t);
639639
}
640640
});
641-
property = context.resolve(aType);
641+
property = clone(context.resolve(aType));
642642

643643
if (property != null) {
644644
if (property.get$ref() == null) {
645-
if (!"object".equals(property.getType()) || (property instanceof MapSchema)) {
646-
try {
647-
String cloneName = property.getName();
648-
property = Json.mapper().readValue(Json.pretty(property), Schema.class);
649-
property.setName(cloneName);
650-
} catch (IOException e) {
651-
LOGGER.error("Could not clone property, e");
652-
}
653-
}
654645
Boolean required = md.getRequired();
655646
if (required != null && !Boolean.FALSE.equals(required)) {
656647
addRequiredItem(model, propName);
@@ -865,6 +856,19 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
865856
return model;
866857
}
867858

859+
private Schema clone(Schema property) {
860+
if(property == null)
861+
return property;
862+
try {
863+
String cloneName = property.getName();
864+
property = Json.mapper().readValue(Json.pretty(property), Schema.class);
865+
property.setName(cloneName);
866+
} catch (IOException e) {
867+
LOGGER.error("Could not clone property, e");
868+
}
869+
return property;
870+
}
871+
868872
private boolean isSubtype(AnnotatedClass childClass, Class<?> parentClass) {
869873
final BeanDescription parentDesc = _mapper.getSerializationConfig().introspectClassAnnotations(parentClass);
870874
List<NamedType> subTypes =_intr.findSubtypes(parentDesc.getClassInfo());
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.swagger.v3.core.resolving;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
5+
import org.testng.annotations.BeforeMethod;
6+
import org.testng.annotations.Test;
7+
8+
import java.util.Map;
9+
10+
import io.swagger.v3.core.converter.AnnotatedType;
11+
import io.swagger.v3.core.converter.ModelConverterContextImpl;
12+
import io.swagger.v3.core.jackson.ModelResolver;
13+
import io.swagger.v3.oas.models.media.Schema;
14+
15+
import static org.testng.Assert.assertEquals;
16+
import static org.testng.Assert.assertNotNull;
17+
18+
public class Ticket3348Test extends SwaggerTestBase {
19+
20+
private ModelResolver modelResolver;
21+
private ModelConverterContextImpl context;
22+
23+
@BeforeMethod
24+
public void beforeMethod() {
25+
modelResolver = new ModelResolver(new ObjectMapper());
26+
context = new ModelConverterContextImpl(modelResolver);
27+
}
28+
29+
@Test
30+
public void testTicket3348() {
31+
final Schema model = context.resolve(new AnnotatedType(WithObjects.class));
32+
assertNotNull(model);
33+
final Map<String, Schema> props = model.getProperties();
34+
assertEquals(props.size(), 2);
35+
}
36+
37+
static class WithObjects {
38+
public Object param1;
39+
public Object param2;
40+
}
41+
}

0 commit comments

Comments
 (0)