You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When generating OpenAPI 3.1.0 spec the @Schema#implementation value on a property is ignored.
Expected behaviour
@Schema#implementation is considered also in OAS3.1
Reproducer
The issues is reproduced in the following test (note that the test is successful if the model resolvers generate OAS3.0.1 instead):
@Test(description = "Shows that @Schema#implementation is not propagated from property when using oas 3.1.0")
public void testModelWithCustomSchemaImplementationInPropertyForOas31() {
String expectedYaml = "ModelWithCustomSchemaImplementationInProperty:\n" +
" type: object\n" +
" properties:\n" +
" exampleField:\n" +
// the expected type is int rather than string as we override the type with @Schema(implementation = Integer.class)
" type: integer\n" +
" format: int32\n";
Map<String, io.swagger.v3.oas.models.media.Schema> stringSchemaMap = ModelConverters.getInstance(true).readAll(ModelWithCustomSchemaImplementationInProperty.class);
// fails as @Schema#implementation is not processed and therefore the original property type is used (String)
SerializationMatchers.assertEqualsToYaml31(stringSchemaMap, expectedYaml);
}
static class ModelWithCustomSchemaImplementationInProperty {
@Schema(implementation = Integer.class)
private String exampleField;
public String getExampleField() {
return exampleField;
}
public void setExampleField(String exampleField) {
this.exampleField = exampleField;
}
}
Investigation with proposed solution
Looking at the ModelResolver code, it seems that @Schema annotation is not propagated when attempting to resolve a model for a property (it is excluded from context annotations in ModelResolver#682). There is an attempt to reconcile this information at ModelResolver#719 (through AnnotationsUtils.getSchemaFromAnnotation). Information from @Schema#implementation is not used here but I imagine that it is necessary to use this information before attempting to resolve the model rather than after as it seems central in the model resolution process. Therefore I wonder if possibly overriding the AnnotatedType#type used for context.resolve in ModelResolver#716 could be a proper solution for the issue?
The text was updated successfully, but these errors were encountered:
Problem
When generating OpenAPI 3.1.0 spec the
@Schema#implementation
value on a property is ignored.Expected behaviour
@Schema#implementation
is considered also in OAS3.1Reproducer
The issues is reproduced in the following test (note that the test is successful if the model resolvers generate OAS3.0.1 instead):
Investigation with proposed solution
Looking at the
ModelResolver
code, it seems that@Schema
annotation is not propagated when attempting to resolve a model for a property (it is excluded from context annotations inModelResolver#682
). There is an attempt to reconcile this information atModelResolver#719
(throughAnnotationsUtils.getSchemaFromAnnotation
). Information from@Schema#implementation
is not used here but I imagine that it is necessary to use this information before attempting to resolve the model rather than after as it seems central in the model resolution process. Therefore I wonder if possibly overriding theAnnotatedType#type
used forcontext.resolve
inModelResolver#716
could be a proper solution for the issue?The text was updated successfully, but these errors were encountered: