Hi all, I am having problems to correctly annotate service methods which consumes multipart/form-data that contains attachments next to other model objects.
I’ve an openapi specification that contains following requestBody definition: /messages: post: tags: - "messages" summary: "Send a message, using a channel (email, paper mail, ebox) and delivery method (registered or normal) of your choice. More than 6 upfiles only supported for PAPER delivery." operationId: createMessage parameters: - $ref: '#/components/parameters/CorrelationId' - $ref: '#/components/parameters/Idempotency-Key' * requestBody*: content: multipart/form-data: schema: type: object required: - messageToSend properties: messageToSend: $ref: '#/components/schemas/MessageToSend' upfile1: type: string format: binary nullable: true upfile2: type: string format: binary nullable: true upfile3: type: string format: binary nullable: true upfile4: type: string format: binary nullable: true upfile5: type: string format: binary nullable: true upfile6: type: string format: binary nullable: true upfile7: type: string format: binary nullable: true upfile8: type: string format: binary nullable: true upfile9: type: string format: binary nullable: true upfile10: type: string format: binary nullable: true upfile11: type: string format: binary nullable: true upfile12: type: string format: binary nullable: true upfile13: type: string format: binary nullable: true upfile14: type: string format: binary nullable: true upfile15: type: string format: binary nullable: true upfile16: type: string format: binary nullable: true upfile17: type: string format: binary nullable: true upfile18: type: string format: binary nullable: true upfile19: type: string format: binary nullable: true upfile20: type: string format: binary nullable: true qrfile: type: string format: binary nullable: true required: true When using the *openapi-generator-maven-plugin* <https://openapi-generator.tech/docs/plugins/> v7.6.0 it generates following method signature: @POST @Path("/messages") @Consumes("multipart/form-data") @Produces({ "application/json" }) @Operation( summary = "Send a message, using a channel (email, paper mail, ebox) and delivery method (registered or normal) of your choice. More than 6 upfiles only supported for PAPER delivery.", tags = {"messages" }, operationId="createMessage", security=@SecurityRequirement(name= "BearerAuthentication"), responses= { @ApiResponse( responseCode = "201", description = "Created", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,array=@ArraySchema( *schema=@Schema(implementation=SendStatusMessage.**class**))* <schema=@Schema(implementation=SendStatusMessage.class))>), headers = { @Header( name="X-Magda-Exceptions", required=*false*, description="Only used in the context of EBOX delivery and if there was a problem with the consent of the receiver's ebox.", *schema=@Schema(implementation=MagdaExceptionList.**class**)* <schema=@Schema(implementation=MagdaExceptionList.class)>) }), @ApiResponse( responseCode = "400", description = "Invalid data supplied", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,schema=@Schema (implementation=ErrorMessage.*class*))), @ApiResponse( responseCode = "401", description = "Invalid authorization", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,schema=@Schema (implementation=ErrorMessage.*class*))), @ApiResponse( responseCode = "500", description = "Unexpected Server Error", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,schema=@Schema (implementation=ErrorMessage.*class*))), @ApiResponse( responseCode = "502", description = "Bad Gateway", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,schema=@Schema (implementation=ErrorMessage.*class*))), @ApiResponse( responseCode = "503", description = "Service unavailable", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,schema=@Schema (implementation=ErrorMessage.*class*))), @ApiResponse( responseCode = "504", description = "Gateway Timeout", content = @Content(mediaType=MediaType.*APPLICATION_JSON*,schema=@Schema (implementation=ErrorMessage.*class*))) }) * public* Response* createMessage*( @HeaderParam("x-correlation-id") @NotNull @Size(min = 10, max = 36) @Parameter(description="ID of the transaction. Use this ID for log tracing and incident handling.") String xCorrelationId, @HeaderParam("Idempotency-Key") @Size(min = 10, max = 36) @Parameter(description="When retrying a failed call, the retry call should have the same Idempotency Key.") String idempotencyKey, @Multipart(value = "messageToSend”, required=* true*) MessageToSend messageToSend, @Multipart(value = "upfile1", required =* false*) Attachment upfile1Detail, @Multipart(value = "upfile2", required =* false*) Attachment upfile2Detail, @Multipart(value = "upfile3", required =* false*) Attachment upfile3Detail, @Multipart(value = "upfile4", required =* false*) Attachment upfile4Detail, @Multipart(value = "upfile5", required =* false*) Attachment upfile5Detail, @Multipart(value = "upfile6", required =* false*) Attachment upfile6Detail, @Multipart(value = "upfile7", required =* false*) Attachment upfile7Detail, @Multipart(value = "upfile8", required =* false*) Attachment upfile8Detail, @Multipart(value = "upfile9", required =* false*) Attachment upfile9Detail, @Multipart(value = "upfile10", required =* false*) Attachment upfile10Detail, @Multipart(value = "upfile11", required =* false*) Attachment upfile11Detail, @Multipart(value = "upfile12", required =* false*) Attachment upfile12Detail, @Multipart(value = "upfile13", required =* false*) Attachment upfile13Detail, @Multipart(value = "upfile14", required =* false*) Attachment upfile14Detail, @Multipart(value = "upfile15", required =* false*) Attachment upfile15Detail, @Multipart(value = "upfile16", required =* false*) Attachment upfile16Detail, @Multipart(value = "upfile17", required =* false*) Attachment upfile17Detail, @Multipart(value = "upfile18", required =* false*) Attachment upfile18Detail, @Multipart(value = "upfile19", required =* false*) Attachment upfile19Detail, @Multipart(value = "upfile20", required =* false*) Attachment upfile20Detail, @Multipart(value = "qrfile", required =* false*) Attachment qrfileDetail); If I now generate the swagger from this code (I modified the annotations in the generated code for using OAS v3 annotations through* swagger-jaxrs**2** v2.1.13* and I am using* cxf-v3.5.6* having* swagger-ui v4.18.2* generate the user interface) none of the upload files appears as request parameter, only the messageToSend is shown. Is the above signature for the method createMessage(...) incorrect? If I look at the generated openapi.json all the Attachment upFiles are missing from the specification? So is it a problem/short-coming(?) of the used software libraries, which then: · cxf-rt-rs-service-description-common-openapi v3.5.6 -> this library references swagger-jaxrs2 v2.1.13 · swagger-jaxrs2 v2.1.13 -> can I upgradethis to e.g. swagger-jaxrs2 v2.2.22 (latest) while retaining cxf v3.5.6? · ...another? Regards, J.P.