Skip to content

Commit 7cd4ae7

Browse files
committed
fix propertyNames schema not removed as unreferenced by specFilter (#5017)
1 parent b518848 commit 7cd4ae7

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
@@ -96,6 +96,7 @@
9696
import io.swagger.v3.jaxrs2.resources.Ticket4859Resource;
9797
import io.swagger.v3.jaxrs2.resources.Ticket4878Resource;
9898
import io.swagger.v3.jaxrs2.resources.Ticket4879Resource;
99+
import io.swagger.v3.jaxrs2.resources.Ticket5017Resource;
99100
import io.swagger.v3.jaxrs2.resources.UploadResource;
100101
import io.swagger.v3.jaxrs2.resources.UrlEncodedResourceWithEncodings;
101102
import io.swagger.v3.jaxrs2.resources.UserAnnotationResource;
@@ -5608,4 +5609,61 @@ public void test4341ArraySchemaOtherAttributes() {
56085609
"Items format should come from schema.format"
56095610
);
56105611
}
5612+
5613+
@Test
5614+
void testTicket5017() {
5615+
ModelResolver.enumsAsRef = true;
5616+
SwaggerConfiguration config = new SwaggerConfiguration().openAPI31(true);
5617+
Reader reader = new Reader(config);
5618+
OpenAPI openAPI = reader.read(Ticket5017Resource.class);
5619+
5620+
OpenAPISpecFilter filterImpl = new RemoveUnusedSchemasOAS31Filter();
5621+
SpecFilter f = new SpecFilter();
5622+
openAPI = f.filter(openAPI, filterImpl, null, null, null);
5623+
5624+
String yaml = "openapi: 3.1.0\n" +
5625+
"paths:\n" +
5626+
" /test:\n" +
5627+
" get:\n" +
5628+
" operationId: myMethod\n" +
5629+
" requestBody:\n" +
5630+
" content:\n" +
5631+
" '*/*':\n" +
5632+
" schema:\n" +
5633+
" $ref: \"#/components/schemas/Example\"\n" +
5634+
" responses:\n" +
5635+
" default:\n" +
5636+
" description: default response\n" +
5637+
" content:\n" +
5638+
" '*/*': {}\n" +
5639+
"components:\n" +
5640+
" schemas:\n" +
5641+
" Example:\n" +
5642+
" type: object\n" +
5643+
" properties:\n" +
5644+
" myMap:\n" +
5645+
" type: object\n" +
5646+
" additionalProperties:\n" +
5647+
" type: string\n" +
5648+
" propertyNames:\n" +
5649+
" $ref: \"#/components/schemas/MyEnum\"\n" +
5650+
" MyEnum:\n" +
5651+
" type: string\n" +
5652+
" enum:\n" +
5653+
" - FOO\n" +
5654+
" - BAR\n";
5655+
SerializationMatchers.assertEqualsToYaml31(openAPI, yaml);
5656+
}
5657+
5658+
static class RemoveUnusedSchemasOAS31Filter extends AbstractSpecFilter {
5659+
@Override
5660+
public boolean isRemovingUnreferencedDefinitions() {
5661+
return true;
5662+
}
5663+
5664+
@Override
5665+
public boolean isOpenAPI31Filter() {
5666+
return true;
5667+
}
5668+
}
56115669
}
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)