Description of the problem/issue
When generating the specs for OpenAPI 3.1 for a JAX-RS resource, there is an issue with @ApiResponse object that uses primitive boxed types for the content schema implementation. When resolving the schema, although the types field in the schema object (io.swagger.v3.oas.models.media.Schema) is correct, type field is always string.
Affected Version
2.2.31 and above
Earliest version the bug appears in:
2.2.31 (introduced in PR 4868)
Steps to Reproduce
@Test
public void testApiResponses31() {
SwaggerConfiguration config = new SwaggerConfiguration().openAPI31(true);
Reader reader = new Reader(config);
OpenAPI openAPI = reader.read(ApiResponsesResource.class);
Operation postOperation = openAPI.getPaths().get("/mypath").getPost();
Schema responseSchema = postOperation.getResponses().get("200").getContent().get("*/*").getSchema();
assertEquals(responseSchema.getType(), "string"); // Incorrect type
assertEquals(responseSchema.getTypes().iterator().next(), "boolean"); // Actual type
}
with ApiResponsesResource class being:
@Path("mypath")
public class ApiResponsesResource {
@POST
@ApiResponses({
@ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = Boolean.class)))
})
public void myMethod() { }
}
Expected Behavior
The type value should either be null or it should match the value in types.
Actual Behavior
type is always set to string (in AnnotationsUtils#947).
Proposed solution
The if condition surrounding the setting of the type to string in AnnotationsUtils#947 should also take types into consideration, so something like:
if (StringUtils.isBlank(existingSchemaObject.get$ref()) && StringUtils.isBlank(existingSchemaObject.getType()) &&
(existingSchemaObject.getTypes() == null || existingSchemaObject.getTypes().isEmpty())) {
Checklist
Description of the problem/issue
When generating the specs for OpenAPI 3.1 for a JAX-RS resource, there is an issue with
@ApiResponseobject that uses primitive boxed types for the content schema implementation. When resolving the schema, although thetypesfield in the schema object (io.swagger.v3.oas.models.media.Schema) is correct,typefield is alwaysstring.Affected Version
2.2.31 and above
Earliest version the bug appears in:
2.2.31 (introduced in PR 4868)
Steps to Reproduce
with
ApiResponsesResourceclass being:Expected Behavior
The
typevalue should either benullor it should match the value intypes.Actual Behavior
typeis always set tostring(inAnnotationsUtils#947).Proposed solution
The if condition surrounding the setting of the type to string in
AnnotationsUtils#947should also taketypesinto consideration, so something like:Checklist