From 3ea346e1bbdf1d6f913d8388d9ab95a2a44b8a4d Mon Sep 17 00:00:00 2001 From: Mintas Date: Sun, 19 Mar 2023 15:18:11 +0300 Subject: [PATCH] [SPRING] resolved ambiguous beanValidation Email annotation imports; fix #13379 (#13962) * resolved ambiguous beanValidation Email annotation imports; fix #13379 * [Java][Spring] fix email import --------- Co-authored-by: Oleh Kurpiak --- .../JavaSpring/beanValidationCore.mustache | 6 +++-- .../java/spring/SpringCodegenTest.java | 25 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationCore.mustache b/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationCore.mustache index f8aa5ab2a9a..7ebfccafca5 100644 --- a/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationCore.mustache +++ b/modules/openapi-generator/src/main/resources/JavaSpring/beanValidationCore.mustache @@ -11,8 +11,10 @@ minLength not set, maxLength set }}{{#minItems}}{{^maxItems}}@Size(min = {{minItems}}) {{/maxItems}}{{/minItems}}{{! @Size: minItems not set && maxItems set }}{{^minItems}}{{#maxItems}}@Size(max = {{.}}) {{/maxItems}}{{/minItems}}{{! -@Email: useBeanValidation set && isEmail set -}}{{#useBeanValidation}}{{#isEmail}}@Email{{/isEmail}}{{/useBeanValidation}}{{! +@Email: useBeanValidation +}}{{#isEmail}}{{#useBeanValidation}}@{{javaxPackage}}.validation.constraints.Email{{/useBeanValidation}}{{! +@Email: performBeanValidation exclusive +}}{{^useBeanValidation}}{{#performBeanValidation}}@org.hibernate.validator.constraints.Email{{/performBeanValidation}}{{/useBeanValidation}}{{/isEmail}}{{! check for integer or long / all others=decimal type with @Decimal* isInteger set }}{{#isInteger}}{{#minimum}}@Min({{.}}) {{/minimum}}{{#maximum}}@Max({{.}}) {{/maximum}}{{/isInteger}}{{! diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 46cec50b1b3..b3e139db21c 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -821,16 +821,25 @@ public class SpringCodegenTest { @Test public void useBeanValidationTruePerformBeanValidationFalseJava8TrueForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, false, true, "@Email", "@org.hibernate.validator.constraints.Email"); + beanValidationForFormatEmail(true, false, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); } @Test public void useBeanValidationTruePerformBeanValidationTrueJava8FalseForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, true, false, "@Email", "@org.hibernate.validator.constraints.Email"); + beanValidationForFormatEmail(true, true, false, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); + } + + @Test + public void useBeanValidationTruePerformBeanValidationFalseJava8TrueJakartaeeTrueForFormatEmail() throws IOException { + beanValidationForFormatEmail(true, false, true, true,"@jakarta.validation.constraints.Email", "@javax.validation.constraints.Email"); } // note: java8 option/mustache tag has been removed and default to true private void beanValidationForFormatEmail(boolean useBeanValidation, boolean performBeanValidation, boolean java8, String contains, String notContains) throws IOException { + this.beanValidationForFormatEmail(useBeanValidation, performBeanValidation, java8, false, contains, notContains); + } + + private void beanValidationForFormatEmail(boolean useBeanValidation, boolean performBeanValidation, boolean java8, boolean useJakarta, String contains, String notContains) throws IOException { File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); output.deleteOnExit(); String outputPath = output.getAbsolutePath().replace('\\', '/'); @@ -842,6 +851,7 @@ public class SpringCodegenTest { codegen.setOutputDir(output.getAbsolutePath()); codegen.setUseBeanValidation(useBeanValidation); codegen.setPerformBeanValidation(performBeanValidation); + codegen.setUseSpringBoot3(useJakarta); ClientOptInput input = new ClientOptInput(); input.openAPI(openAPI); @@ -855,15 +865,20 @@ public class SpringCodegenTest { generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "false"); generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false"); - List files = generator.opts(input).generate(); + Map files = generator.opts(input).generate().stream() + .collect(Collectors.toMap(File::getName, Function.identity())); + JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("PersonWithEmail.java")) + .printFileContent(); + if (useBeanValidation) javaFileAssert.hasImports((useJakarta? "jakarta" : "javax") + ".validation.constraints"); + if (performBeanValidation) javaFileAssert.hasImports("org.hibernate.validator.constraints"); assertFileContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), contains); assertFileNotContains(Paths.get(outputPath + "/src/main/java/org/openapitools/model/PersonWithEmail.java"), notContains); } @Test public void useBeanValidationTruePerformBeanValidationTrueJava8TrueForFormatEmail() throws IOException { - beanValidationForFormatEmail(true, true, true, "@Email", "@org.hibernate.validator.constraints.Email"); + beanValidationForFormatEmail(true, true, true, "@javax.validation.constraints.Email", "@org.hibernate.validator.constraints.Email"); } @Test @@ -1934,7 +1949,7 @@ public class SpringCodegenTest { JavaFileAssert javaFileAssert = JavaFileAssert.assertThat(files.get("Person.java")) .printFileContent(); javaFileAssert.assertMethod("getName").assertMethodAnnotations() - .containsWithName("NotNull").containsWithName("Size").containsWithName("Email"); + .containsWithName("NotNull").containsWithName("Size").containsWithName("javax.validation.constraints.Email"); javaFileAssert .hasNoImports("javax.validation.constraints.NotNull") .hasImports("javax.validation.constraints");