diff --git a/modules/openapi-generator/src/main/resources/Java/beanValidationQueryParams.mustache b/modules/openapi-generator/src/main/resources/Java/beanValidationQueryParams.mustache index c4ff01d7e55..0f99bffde09 100644 --- a/modules/openapi-generator/src/main/resources/Java/beanValidationQueryParams.mustache +++ b/modules/openapi-generator/src/main/resources/Java/beanValidationQueryParams.mustache @@ -1 +1 @@ -{{#required}} @NotNull{{/required}}{{>beanValidationCore}} \ No newline at end of file +{{#required}} @NotNull {{/required}}{{>beanValidationCore}} \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index c0bf2b4dc2b..99892f884be 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -37,6 +37,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; +import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -53,8 +54,10 @@ import org.openapitools.codegen.CodegenSecurity; import org.openapitools.codegen.DefaultGenerator; import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.config.CodegenConfigurator; +import org.openapitools.codegen.java.assertions.JavaFileAssert; import org.openapitools.codegen.languages.AbstractJavaCodegen; import org.openapitools.codegen.languages.JavaClientCodegen; +import org.openapitools.codegen.languages.features.BeanValidationFeatures; import org.openapitools.codegen.languages.features.CXFServerFeatures; import org.testng.Assert; import org.testng.annotations.Ignore; @@ -1409,4 +1412,36 @@ public class JavaClientCodegenTest { TestUtils.assertExtraAnnotationFiles(outputPath + "/src/main/java/org/openapitools/client/model"); } + + /** + * See https://github.com/OpenAPITools/openapi-generator/issues/11340 + */ + @Test + public void testReferencedHeader2() throws Exception { + File output = Files.createTempDirectory("test").toFile().getCanonicalFile(); + output.deleteOnExit(); + Map additionalProperties = new HashMap<>(); + additionalProperties.put(BeanValidationFeatures.USE_BEANVALIDATION, "true"); + final CodegenConfigurator configurator = new CodegenConfigurator().setGeneratorName("java") + .setAdditionalProperties(additionalProperties) + .setInputSpec("src/test/resources/3_0/issue-11340.yaml") + .setOutputDir(output.getAbsolutePath() + .replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(); + + Map files = generator.opts(clientOptInput).generate().stream() + .collect(Collectors.toMap(File::getName, Function.identity())); + + JavaFileAssert.assertThat(files.get("DefaultApi.java")) + .assertMethod("operationWithHttpInfo") + .hasParameter("requestBody") + .assertParameterAnnotations() + .containsWithName("NotNull") + .toParameter().toMethod() + .hasParameter("xNonNullHeaderParameter") + .assertParameterAnnotations() + .containsWithName("NotNull"); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/issue-11340.yaml b/modules/openapi-generator/src/test/resources/3_0/issue-11340.yaml new file mode 100644 index 00000000000..167a82b12c2 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue-11340.yaml @@ -0,0 +1,28 @@ +openapi: "3.0.3" +info: + title: Issue 11340 - Bean Validation Breaks Generated Java Code + version: "1.0.2" + description: With Bean Validation @NotNull and type of parameter must be separated by space. +paths: + /configuration: + put: + operationId: operation + description: Operation with required header and required request body + parameters: + - in: header + name: x-non-null-header-parameter + schema: + type: string + required: true + requestBody: + required: true + content: + application/json: + schema: + type: object + minProperties: 1 + additionalProperties: + type: object + responses: + '200': + description: OK