Skip to content

Commit cfd18dd

Browse files
committed
Removes caching of List element schema processing result to avoid over-applied XML annotations.
1 parent 98d19d9 commit cfd18dd

File tree

6 files changed

+37
-6
lines changed

6 files changed

+37
-6
lines changed

modules/swagger-core/src/main/java/io/swagger/v3/core/converter/AnnotatedType.java

+14
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class AnnotatedType {
2929
private boolean skipSchemaName;
3030
private boolean skipJsonIdentity;
3131
private String propertyName;
32+
private boolean collectionElement;
3233

3334
public AnnotatedType() {
3435
}
@@ -50,6 +51,19 @@ public AnnotatedType skipOverride(boolean skipOverride) {
5051
return this;
5152
}
5253

54+
public boolean isCollectionElement() {
55+
return collectionElement;
56+
}
57+
58+
public void setCollectionElement(boolean collectionElement) {
59+
this.collectionElement = collectionElement;
60+
}
61+
62+
public AnnotatedType collectionElement(boolean collectionElement) {
63+
this.collectionElement = collectionElement;
64+
return this;
65+
}
66+
5367
public boolean isSkipJsonIdentity() {
5468
return skipJsonIdentity;
5569
}

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

+1-4
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
import java.util.Set;
1818
import java.util.TreeMap;
1919

20-
import com.fasterxml.jackson.databind.type.SimpleType;
21-
import com.fasterxml.jackson.databind.type.TypeBase;
22-
2320
public class ModelConverterContextImpl implements ModelConverterContext {
2421
private static final Logger LOGGER = LoggerFactory.getLogger(ModelConverterContextImpl.class);
2522

@@ -93,7 +90,7 @@ public Schema resolve(AnnotatedType type) {
9390
LOGGER.trace("trying extension " + converter);
9491
resolved = converter.resolve(type, this, converters);
9592
}
96-
if (resolved != null) {
93+
if (resolved != null && !type.isCollectionElement()) {
9794
modelByType.put(type, resolved);
9895

9996
Schema resolvedImpl = resolved;

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,8 @@ public Schema resolve(AnnotatedType annotatedType, ModelConverterContext context
432432
.resolveAsRef(annotatedType.isResolveAsRef())
433433
.propertyName(annotatedType.getPropertyName())
434434
.jsonViewAnnotation(annotatedType.getJsonViewAnnotation())
435-
.parent(annotatedType.getParent()));
435+
.parent(annotatedType.getParent())
436+
.collectionElement(true));
436437

437438
if (items == null) {
438439
return null;

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/PetResourceTest.java

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.swagger.v3.jaxrs2;
22

3+
import io.swagger.v3.core.converter.ModelConverters;
34
import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest;
45
import io.swagger.v3.jaxrs2.matchers.SerializationMatchers;
56
import io.swagger.v3.jaxrs2.petstore.EmptyPetResource;
@@ -256,6 +257,7 @@ private static List<Class> findClasses(final File directory, final String packag
256257
* @param source where is the yaml.
257258
*/
258259
private void compare(final Class clazz, final String source) {
260+
ModelConverters.getInstance().resetContext();
259261
final String file = source + clazz.getSimpleName() + YAML_EXTENSION;
260262
try {
261263
compareAsYaml(clazz, getOpenAPIAsString(file));

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/ReaderTest.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
import io.swagger.v3.oas.models.responses.ApiResponses;
9191
import io.swagger.v3.oas.models.security.SecurityRequirement;
9292
import io.swagger.v3.oas.models.security.SecurityScheme;
93+
94+
import org.testng.annotations.BeforeMethod;
9395
import org.testng.annotations.Test;
9496

9597
import javax.validation.constraints.AssertTrue;
@@ -159,6 +161,11 @@ public class ReaderTest {
159161
private static final int SCOPE_NUMBER = 2;
160162
private static final int PATHS_NUMBER = 1;
161163

164+
@BeforeMethod
165+
public void beforeTest() {
166+
ModelConverters.getInstance().resetContext();
167+
}
168+
162169
@Test(description = "test a simple resource class")
163170
public void testSimpleReadClass() {
164171
Reader reader = new Reader(new OpenAPI());
@@ -2107,7 +2114,7 @@ public void testTicket3074() {
21072114
Reader reader = new Reader(new OpenAPI());
21082115
OpenAPI oasResult = reader.read(RefParameter3074Resource.class);
21092116
SerializationMatchers.assertEqualsToYaml(oasResult, RefParameter3074Resource.EXPECTED_YAML_WITH_WRAPPER);
2110-
2117+
ModelConverters.getInstance().resetContext();
21112118
ModelConverters.getInstance().addClassToSkip("io.swagger.v3.jaxrs2.resources.RefParameter3074Resource$Wrapper");
21122119

21132120
reader = new Reader(new OpenAPI());

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/AbstractAnnotationTest.java

+10
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import com.fasterxml.jackson.databind.JsonNode;
5+
6+
import io.swagger.v3.core.converter.ModelConverter;
7+
import io.swagger.v3.core.converter.ModelConverters;
58
import io.swagger.v3.core.util.Yaml;
69
import io.swagger.v3.jaxrs2.Reader;
710
import io.swagger.v3.jaxrs2.matchers.SerializationMatchers;
811
import io.swagger.v3.oas.models.OpenAPI;
912
import org.apache.commons.io.IOUtils;
13+
import org.testng.annotations.BeforeMethod;
1014

1115
import java.io.IOException;
1216
import java.io.InputStream;
@@ -15,6 +19,11 @@
1519
import static org.testng.Assert.fail;
1620

1721
public abstract class AbstractAnnotationTest {
22+
@BeforeMethod
23+
public void beforeTest() {
24+
ModelConverters.getInstance().resetContext();
25+
}
26+
1827
public String readIntoYaml(final Class<?> cls) {
1928
Reader reader = new Reader(new OpenAPI());
2029
OpenAPI openAPI = reader.read(cls);
@@ -42,6 +51,7 @@ public void compareToYamlFile(final Class<?> cls, String source){
4251
}
4352

4453
public void compareAsYaml(final Class<?> cls, final String yaml) throws IOException {
54+
ModelConverters.getInstance().resetContext();
4555
Reader reader = new Reader(new OpenAPI());
4656
OpenAPI openAPI = reader.read(cls);
4757
SerializationMatchers.assertEqualsToYaml(openAPI, yaml);

0 commit comments

Comments
 (0)