Skip to content

Commit 80b1751

Browse files
committed
fix
1 parent 970e1c3 commit 80b1751

File tree

5 files changed

+124
-26
lines changed

5 files changed

+124
-26
lines changed

src/main/java/io/swagger/codegen/v3/generators/handlebars/java/JavaHelper.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,26 @@ public CharSequence getModelImports(Map<String, Object> templateData, Options op
7979
boolean withXml = Boolean.valueOf(String.valueOf(templateData.get("withXml")));
8080
boolean parcelableModel = Boolean.valueOf(String.valueOf(templateData.get("parcelableModel")));
8181
boolean useBeanValidation = Boolean.valueOf(String.valueOf(templateData.get("useBeanValidation")));
82+
boolean jakarta = Boolean.valueOf(String.valueOf(templateData.get("jakarta")));
8283
if (serializableMode) {
8384
builder.append("import java.io.Serializable;\n");
8485
}
8586
if (jackson && withXml) {
8687
builder.append("import com.fasterxml.jackson.dataformat.xml.annotation.*;\n");
8788
}
88-
if (withXml) {
89-
builder.append("import javax.xml.bind.annotation.*;\n");
89+
if (withXml && jakarta) {
90+
builder.append("import jakarta.xml.bind.annotation.*;\n");
91+
} else if (withXml) {
92+
builder.append("import jakarta.xml.bind.annotation.*;\n");
9093
}
9194
if (parcelableModel) {
9295
builder.append("import android.os.Parcelable;\n");
9396
builder.append("import android.os.Parcel;\n");
9497
}
95-
if (useBeanValidation) {
98+
if (useBeanValidation && jakarta) {
99+
builder.append("import jakarta.validation.constraints.*;\n");
100+
builder.append("import jakarta.validation.Valid;\n");
101+
} else if (useBeanValidation) {
96102
builder.append("import javax.validation.constraints.*;\n");
97103
builder.append("import javax.validation.Valid;\n");
98104
}

src/main/java/io/swagger/codegen/v3/generators/java/AbstractJavaCodegen.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package io.swagger.codegen.v3.generators.java;
22

3+
import static io.swagger.codegen.v3.CodegenConstants.HAS_ENUMS_EXT_NAME;
4+
import static io.swagger.codegen.v3.CodegenConstants.IS_ENUM_EXT_NAME;
5+
import static io.swagger.codegen.v3.generators.features.NotNullAnnotationFeatures.NOT_NULL_JACKSON_ANNOTATION;
6+
import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue;
7+
38
import com.github.jknack.handlebars.Handlebars;
49
import io.swagger.codegen.v3.CliOption;
510
import io.swagger.codegen.v3.CodegenArgument;
@@ -26,11 +31,6 @@
2631
import io.swagger.v3.oas.models.parameters.RequestBody;
2732
import io.swagger.v3.oas.models.responses.ApiResponse;
2833
import io.swagger.v3.parser.util.SchemaTypeUtil;
29-
import org.apache.commons.lang3.BooleanUtils;
30-
import org.apache.commons.lang3.StringUtils;
31-
import org.slf4j.Logger;
32-
import org.slf4j.LoggerFactory;
33-
3434
import java.io.File;
3535
import java.util.Arrays;
3636
import java.util.HashMap;
@@ -42,11 +42,10 @@
4242
import java.util.Objects;
4343
import java.util.Optional;
4444
import java.util.regex.Pattern;
45-
46-
import static io.swagger.codegen.v3.CodegenConstants.HAS_ENUMS_EXT_NAME;
47-
import static io.swagger.codegen.v3.CodegenConstants.IS_ENUM_EXT_NAME;
48-
import static io.swagger.codegen.v3.generators.features.NotNullAnnotationFeatures.NOT_NULL_JACKSON_ANNOTATION;
49-
import static io.swagger.codegen.v3.generators.handlebars.ExtensionHelper.getBooleanValue;
45+
import org.apache.commons.lang3.BooleanUtils;
46+
import org.apache.commons.lang3.StringUtils;
47+
import org.slf4j.Logger;
48+
import org.slf4j.LoggerFactory;
5049

5150
public abstract class AbstractJavaCodegen extends DefaultCodegenConfig {
5251
private static Logger LOGGER = LoggerFactory.getLogger(AbstractJavaCodegen.class);
@@ -503,8 +502,10 @@ public void processOpts() {
503502
additionalProperties.put("legacyDates", true);
504503
}
505504

506-
setJakarta(Boolean.parseBoolean(String.valueOf(additionalProperties.get(JAKARTA))));
507-
additionalProperties.put(JAKARTA, jakarta);
505+
if (additionalProperties.containsKey(JAKARTA)) {
506+
setJakarta(Boolean.parseBoolean(String.valueOf(additionalProperties.get(JAKARTA))));
507+
additionalProperties.put(JAKARTA, jakarta);
508+
}
508509
}
509510

510511
private void sanitizeConfig() {

src/main/java/io/swagger/codegen/v3/generators/java/JavaJAXRSCXFCDIServerCodegen.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import io.swagger.codegen.v3.CodegenProperty;
66
import io.swagger.codegen.v3.SupportingFile;
77
import io.swagger.codegen.v3.generators.features.BeanValidationFeatures;
8-
import org.apache.commons.lang3.StringUtils;
9-
108
import java.io.File;
119

1210
/**
@@ -48,7 +46,14 @@ public void processOpts() {
4846

4947
super.processOpts();
5048

51-
importMapping.put("Valid", "javax.validation.Valid");
49+
if (additionalProperties.containsKey(JAKARTA)) {
50+
setJakarta(convertPropertyToBoolean(JAKARTA));
51+
}
52+
if (jakarta) {
53+
importMapping.put("Valid", "jakarta.validation.Valid");
54+
} else {
55+
importMapping.put("Valid", "javax.validation.Valid");
56+
}
5257

5358
// Three API templates to support CDI injection
5459
apiTemplateFiles.put("apiService.mustache", ".java");

src/main/resources/handlebars/JavaSpring/apiController.mustache

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,23 @@ import org.springframework.web.bind.annotation.RestController;
4141
import org.springframework.web.multipart.MultipartFile;
4242

4343
{{#useBeanValidation}}
44-
{{#jakarta}}
45-
import jakarta.validation.Valid;
46-
import jakarta.validation.constraints.*;
47-
{{/jakarta}}
48-
{{^jakarta}}
49-
import javax.validation.Valid;
50-
import javax.validation.constraints.*;
51-
{{/jakarta}}
44+
{{#jakarta}}
45+
import jakarta.validation.Valid;
46+
import jakarta.validation.constraints.*;
47+
{{/jakarta}}
48+
{{^jakarta}}
49+
import javax.validation.Valid;
50+
import javax.validation.constraints.*;
51+
{{/jakarta}}
5252
{{/useBeanValidation}}
5353
{{/fullController}}
5454
{{^isDelegate}}
55+
{{#jakarta}}
56+
import jakarta.servlet.http.HttpServletRequest;
57+
{{/jakarta}}
58+
{{^jakarta}}
5559
import javax.servlet.http.HttpServletRequest;
60+
{{/jakarta}}
5661
{{#isJava8or11}}
5762
import java.util.Optional;
5863
{{/isJava8or11}}

src/test/java/io/swagger/codegen/v3/generators/java/SpringGeneratorCodegenTest.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.swagger.codegen.v3.generators.java;
22

3+
import static io.swagger.codegen.v3.generators.java.AbstractJavaCodegen.JAKARTA;
4+
35
import io.swagger.codegen.v3.ClientOptInput;
46
import io.swagger.codegen.v3.CodegenArgument;
57
import io.swagger.codegen.v3.CodegenConstants;
@@ -41,6 +43,12 @@ public void testParameterOrdersUseOas2() throws Exception {
4143
Assert.assertTrue(content.contains("ResponseEntity<LocalizedText> updateTest(@ApiParam(value = \"description\", required=true) @PathVariable(\"id\") Long id"));
4244
Assert.assertTrue(content.contains("@ApiParam(value = \"Localized Text object containing updated data.\", required=true ) @Valid @RequestBody LocalizedText body"));
4345

46+
final File adminApiControllerFile = new File(output, "/src/main/java/io/swagger/api/AdminApiController.java");
47+
final String contentAdminApiController = FileUtils.readFileToString(adminApiControllerFile);
48+
49+
Assert.assertFalse(contentAdminApiController.contains("jakarta"));
50+
Assert.assertTrue(contentAdminApiController.contains("javax"));
51+
4452
folder.delete();
4553
}
4654

@@ -64,6 +72,79 @@ public void testParameterOrdersUseOas3() throws Exception {
6472
Assert.assertTrue(content.contains("ResponseEntity<LocalizedText> updateTest(@Parameter(in = ParameterIn.PATH, description = \"description\", required=true, schema=@Schema()) @PathVariable(\"id\") Long id"));
6573
Assert.assertTrue(content.contains("@Parameter(in = ParameterIn.DEFAULT, description = \"Localized Text object containing updated data.\", required=true, schema=@Schema()) @Valid @RequestBody LocalizedText body"));
6674

75+
final File adminApiControllerFile = new File(output, "/src/main/java/io/swagger/api/AdminApiController.java");
76+
final String contentAdminApiController = FileUtils.readFileToString(adminApiControllerFile);
77+
78+
Assert.assertFalse(contentAdminApiController.contains("jakarta"));
79+
Assert.assertTrue(contentAdminApiController.contains("javax"));
80+
81+
folder.delete();
82+
}
83+
84+
@Test(description = "verify oas2 & jakarta")
85+
public void testOas2AndJakarta() throws Exception {
86+
final TemporaryFolder folder = new TemporaryFolder();
87+
folder.create();
88+
final File output = folder.getRoot();
89+
90+
final CodegenConfigurator configurator = new CodegenConfigurator()
91+
.setLang("spring")
92+
.setInputSpecURL("src/test/resources/3_0_0/parameterOrder.yaml")
93+
.setOutputDir(output.getAbsolutePath())
94+
.addAdditionalProperty(JAKARTA, true);
95+
96+
configurator.setCodegenArguments(Collections.singletonList(
97+
new CodegenArgument()
98+
.option(CodegenConstants.USE_OAS2_OPTION)
99+
.type("boolean")
100+
.value(Boolean.TRUE.toString())));
101+
102+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
103+
new DefaultGenerator().opts(clientOptInput).generate();
104+
105+
final File adminApiFile = new File(output, "/src/main/java/io/swagger/api/AdminApi.java");
106+
final String contentAdminApi = FileUtils.readFileToString(adminApiFile);
107+
108+
Assert.assertTrue(contentAdminApi.contains("ResponseEntity<LocalizedText> updateTest(@ApiParam(value = \"description\", required=true) @PathVariable(\"id\") Long id"));
109+
Assert.assertTrue(contentAdminApi.contains("@ApiParam(value = \"Localized Text object containing updated data.\", required=true ) @Valid @RequestBody LocalizedText body"));
110+
111+
final File adminApiControllerFile = new File(output, "/src/main/java/io/swagger/api/AdminApiController.java");
112+
final String contentAdminApiController = FileUtils.readFileToString(adminApiControllerFile);
113+
114+
Assert.assertTrue(contentAdminApiController.contains("jakarta"));
115+
Assert.assertFalse(contentAdminApiController.contains("javax"));
116+
117+
folder.delete();
118+
}
119+
120+
@Test(description = "verify oas3 & jakarta")
121+
public void testUseOas3AndJakarta() throws Exception {
122+
final TemporaryFolder folder = new TemporaryFolder();
123+
folder.create();
124+
final File output = folder.getRoot();
125+
126+
final CodegenConfigurator configurator = new CodegenConfigurator()
127+
.setLang("spring")
128+
.setInputSpecURL("src/test/resources/3_0_0/parameterOrder.yaml")
129+
.setOutputDir(output.getAbsolutePath())
130+
.addAdditionalProperty(JAKARTA, true);
131+
132+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
133+
new DefaultGenerator().opts(clientOptInput).generate();
134+
135+
final File adminApiFile = new File(output, "/src/main/java/io/swagger/api/AdminApi.java");
136+
final String contentAdminApi = FileUtils.readFileToString(adminApiFile);
137+
138+
Assert.assertTrue(contentAdminApi.contains("ResponseEntity<LocalizedText> updateTest(@Parameter(in = ParameterIn.PATH, description = \"description\", required=true, schema=@Schema()) @PathVariable(\"id\") Long id"));
139+
Assert.assertTrue(contentAdminApi.contains("@Parameter(in = ParameterIn.DEFAULT, description = \"Localized Text object containing updated data.\", required=true, schema=@Schema()) @Valid @RequestBody LocalizedText body"));
140+
141+
142+
final File adminApiControllerFile = new File(output, "/src/main/java/io/swagger/api/AdminApiController.java");
143+
final String contentAdminApiController = FileUtils.readFileToString(adminApiControllerFile);
144+
145+
Assert.assertTrue(contentAdminApiController.contains("jakarta"));
146+
Assert.assertFalse(contentAdminApiController.contains("javax"));
147+
67148
folder.delete();
68149
}
69150

0 commit comments

Comments
 (0)