diff --git a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/formParams.mustache b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/formParams.mustache index e67c9fda95f3..2a3a86144186 100644 --- a/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/formParams.mustache +++ b/modules/openapi-generator/src/main/resources/JavaJaxRS/spec/formParams.mustache @@ -1,2 +1,2 @@ {{#isFormParam}} -{{#isDeprecated}}@Deprecated {{/isDeprecated}}{{^isFile}}@FormParam(value = "{{baseName}}") {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}@FormParam(value = "{{baseName}}") InputStream {{paramName}}InputStream{{/isFile}}{{/isFormParam}} \ No newline at end of file +{{#isDeprecated}}@Deprecated {{/isDeprecated}}{{^isFile}}@FormParam(value = "{{baseName}}") {{{dataType}}} {{paramName}}{{/isFile}}{{#isFile}}{{^isArray}}@FormParam(value = "{{baseName}}") InputStream {{paramName}}InputStream{{/isArray}}{{#isArray}}@FormParam(value = "{{baseName}}") List {{paramName}}InputStream{{/isArray}}{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java index 28e85f3dc654..9992cef7cc40 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java @@ -2424,4 +2424,54 @@ public void generatesEmailAnnotationOnQueryParameterWhenBeanValidationEnabled() assertFileContains(api, "import javax.validation.constraints.*;"); assertFileContains(api, "@QueryParam(\"email\")", "@Email", "String email"); } + + /** + * An array of binary form properties must keep its array dimension. Previously the array was + * collapsed onto the scalar file type, generating the same signature as a single-file upload. + */ + @Test + public void testMultipartFileArrayIsGeneratedAsList() throws IOException { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + String outputPath = output.getAbsolutePath().replace('\\', '/'); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("jaxrs-spec") + .setInputSpec("src/test/resources/3_0/form-multipart-binary-array.yaml") + .setOutputDir(outputPath); + + DefaultGenerator generator = new DefaultGenerator(false); + List files = generator.opts(configurator.toClientOptInput()).generate(); + validateJavaSourceFiles(files); + + assertFileContains(Paths.get(outputPath + "/src/gen/java/org/openapitools/api/MultipartArrayApi.java"), + "@FormParam(value = \"files\") List filesInputStream"); + // a single binary property is still bound to a scalar InputStream + assertFileContains(Paths.get(outputPath + "/src/gen/java/org/openapitools/api/MultipartSingleApi.java"), + "@FormParam(value = \"file\") InputStream _fileInputStream"); + } + + /** The array dimension is preserved for every library, including quarkus. */ + @Test + public void testMultipartFileArrayIsGeneratedAsListForQuarkus() throws IOException { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + String outputPath = output.getAbsolutePath().replace('\\', '/'); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("jaxrs-spec") + .setLibrary(QUARKUS_LIBRARY) + .setInputSpec("src/test/resources/3_0/form-multipart-binary-array.yaml") + .setOutputDir(outputPath); + + DefaultGenerator generator = new DefaultGenerator(false); + List files = generator.opts(configurator.toClientOptInput()).generate(); + validateJavaSourceFiles(files); + + assertFileContains(Paths.get(outputPath + "/src/gen/java/org/openapitools/api/MultipartArrayApi.java"), + "@FormParam(value = \"files\") List filesInputStream"); + // a single binary property is still bound to a scalar InputStream + assertFileContains(Paths.get(outputPath + "/src/gen/java/org/openapitools/api/MultipartSingleApi.java"), + "@FormParam(value = \"file\") InputStream _fileInputStream"); + } }