Skip to content

Commit 3c62cb5

Browse files
committed
fix propertyNames schema not removed as unreferenced by specFilter (#5017)
1 parent 23d2971 commit 3c62cb5

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed

modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,10 @@ private void addSchemaRef(Schema schema, Set<String> referencedDefinitions) {
330330
}
331331
}
332332

333+
if (schema.getPropertyNames() != null) {
334+
addSchemaRef(schema.getPropertyNames(), referencedDefinitions);
335+
}
336+
333337
if (schema instanceof ArraySchema &&
334338
((ArraySchema) schema).getItems() != null) {
335339
addSchemaRef(((ArraySchema) schema).getItems(), referencedDefinitions);

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

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
import io.swagger.v3.jaxrs2.resources.Ticket4859Resource;
9595
import io.swagger.v3.jaxrs2.resources.Ticket4878Resource;
9696
import io.swagger.v3.jaxrs2.resources.Ticket4879Resource;
97+
import io.swagger.v3.jaxrs2.resources.Ticket5017Resource;
9798
import io.swagger.v3.jaxrs2.resources.UploadResource;
9899
import io.swagger.v3.jaxrs2.resources.UrlEncodedResourceWithEncodings;
99100
import io.swagger.v3.jaxrs2.resources.UserAnnotationResource;
@@ -5503,4 +5504,61 @@ public void testTicket4907() {
55035504
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
55045505
ModelConverters.reset();
55055506
}
5507+
5508+
@Test
5509+
void testTicket5017() {
5510+
ModelResolver.enumsAsRef = true;
5511+
SwaggerConfiguration config = new SwaggerConfiguration().openAPI31(true);
5512+
Reader reader = new Reader(config);
5513+
OpenAPI openAPI = reader.read(Ticket5017Resource.class);
5514+
5515+
OpenAPISpecFilter filterImpl = new RemoveUnusedSchemasOAS31Filter();
5516+
SpecFilter f = new SpecFilter();
5517+
openAPI = f.filter(openAPI, filterImpl, null, null, null);
5518+
5519+
String yaml = "openapi: 3.1.0\n" +
5520+
"paths:\n" +
5521+
" /test:\n" +
5522+
" get:\n" +
5523+
" operationId: myMethod\n" +
5524+
" requestBody:\n" +
5525+
" content:\n" +
5526+
" '*/*':\n" +
5527+
" schema:\n" +
5528+
" $ref: \"#/components/schemas/Example\"\n" +
5529+
" responses:\n" +
5530+
" default:\n" +
5531+
" description: default response\n" +
5532+
" content:\n" +
5533+
" '*/*': {}\n" +
5534+
"components:\n" +
5535+
" schemas:\n" +
5536+
" Example:\n" +
5537+
" type: object\n" +
5538+
" properties:\n" +
5539+
" myMap:\n" +
5540+
" type: object\n" +
5541+
" additionalProperties:\n" +
5542+
" type: string\n" +
5543+
" propertyNames:\n" +
5544+
" $ref: \"#/components/schemas/MyEnum\"\n" +
5545+
" MyEnum:\n" +
5546+
" type: string\n" +
5547+
" enum:\n" +
5548+
" - FOO\n" +
5549+
" - BAR\n";
5550+
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
5551+
}
5552+
5553+
static class RemoveUnusedSchemasOAS31Filter extends AbstractSpecFilter {
5554+
@Override
5555+
public boolean isRemovingUnreferencedDefinitions() {
5556+
return true;
5557+
}
5558+
5559+
@Override
5560+
public boolean isOpenAPI31Filter() {
5561+
return true;
5562+
}
5563+
}
55065564
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package io.swagger.v3.jaxrs2.resources;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
5+
import javax.ws.rs.GET;
6+
import javax.ws.rs.Path;
7+
import java.util.Map;
8+
9+
@Path("/test")
10+
public class Ticket5017Resource {
11+
@GET
12+
public void myMethod(Example request) {}
13+
14+
public static class Example {
15+
@Schema(propertyNames = MyEnum.class)
16+
private Map<MyEnum, String> myMap;
17+
18+
public Map<MyEnum, String> getMyMap() {
19+
return myMap;
20+
}
21+
22+
public void setMyMap(Map<MyEnum, String> myMap) {
23+
this.myMap = myMap;
24+
}
25+
}
26+
27+
public enum MyEnum {
28+
FOO, BAR
29+
}
30+
}

0 commit comments

Comments
 (0)