Skip to content

Commit

Permalink
[kotlin-server] add support for jakarta ee namespace (#15593)
Browse files Browse the repository at this point in the history
  • Loading branch information
stephan-strate committed May 24, 2023
1 parent 48ef91a commit 9890f07
Show file tree
Hide file tree
Showing 9 changed files with 198 additions and 9 deletions.
1 change: 1 addition & 0 deletions docs/generators/kotlin-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|sourceFolder|source folder for generated code| |src/main/kotlin|
|useBeanValidation|Use BeanValidation API annotations. This option is currently supported only when using jaxrs-spec library.| |false|
|useCoroutines|Whether to use the Coroutines. This option is currently supported only when using jaxrs-spec library.| |false|
|useJakartaEe|whether to use Jakarta EE namespace instead of javax| |false|

## IMPORT MAPPING

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ public KotlinServerCodegen() {
cliOptions.add(CliOption.newBoolean(USE_BEANVALIDATION, "Use BeanValidation API annotations. This option is currently supported only when using jaxrs-spec library.", useBeanValidation));
cliOptions.add(CliOption.newBoolean(USE_COROUTINES, "Whether to use the Coroutines. This option is currently supported only when using jaxrs-spec library.", useCoroutines));
cliOptions.add(CliOption.newBoolean(RETURN_RESPONSE, "Whether generate API interface should return javax.ws.rs.core.Response instead of a deserialized entity. Only useful if interfaceOnly is true. This option is currently supported only when using jaxrs-spec library.").defaultValue(String.valueOf(returnResponse)));
cliOptions.add(CliOption.newBoolean(USE_JAKARTA_EE, "whether to use Jakarta EE namespace instead of javax", useJakartaEe));
}

public Boolean getAutoHeadFeatureEnabled() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ package {{package}};
{{#imports}}import {{import}}
{{/imports}}

import javax.ws.rs.*
import javax.ws.rs.core.Response
import {{javaxPackage}}.ws.rs.*
import {{javaxPackage}}.ws.rs.core.Response

{{#useSwaggerAnnotations}}
import io.swagger.annotations.*
{{/useSwaggerAnnotations}}

import java.io.InputStream
{{#useBeanValidation}}import javax.validation.constraints.*
import javax.validation.Valid{{/useBeanValidation}}
{{#useBeanValidation}}import {{javaxPackage}}.validation.constraints.*
import {{javaxPackage}}.validation.Valid{{/useBeanValidation}}

{{#useSwaggerAnnotations}}
@Api(description = "the {{{baseName}}} API"){{/useSwaggerAnnotations}}{{#hasConsumes}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,15 @@ wrapper {

buildscript {
ext.kotlin_version = "1.4.32"
ext.jakarta_ws_rs_version = "2.1.6"
ext.swagger_annotations_version = "1.5.3"
{{#useJakartaEe}}
ext.jakarta_annotations_version = "2.1.1"
ext.jakarta_ws_rs_version = "3.1.0"
{{/useJakartaEe}}
{{^useJakartaEe}}
ext.jakarta_annotations_version = "1.3.5"
ext.jakarta_ws_rs_version = "2.1.6"
{{/useJakartaEe}}
ext.jackson_version = "2.9.9"
{{#useBeanValidation}}
ext.beanvalidation_version = "2.0.2"
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
@javax.annotation.Generated(value = arrayOf("{{generatorClass}}"){{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})
@{{javaxPackage}}.annotation.Generated(value = arrayOf("{{generatorClass}}"){{^hideGenerationTimestamp}}, date = "{{generatedDate}}"{{/hideGenerationTimestamp}})
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ package {{modelPackage}}
{{#imports}}import {{import}}
{{/imports}}
{{#useBeanValidation}}
import javax.validation.constraints.*
import javax.validation.Valid
import {{javaxPackage}}.validation.constraints.*
import {{javaxPackage}}.validation.Valid
{{/useBeanValidation}}
{{#models}}
{{#model}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,4 +320,18 @@ public void handleInheritanceWithObjectTypeShouldNotBeAMap() {
.fromModel("MapSchema", mapSchema);
Assert.assertTrue(mapSchemaModel.isMap);
}

@Test
public void handleUseJakartaEeTrue() {
codegen.additionalProperties().put("useJakartaEe", true);
codegen.processOpts();
assertEquals(codegen.additionalProperties().get("javaxPackage"), "jakarta");
}

@Test
public void handleUseJakartaEeFalse() {
codegen.additionalProperties().put("useJakartaEe", false);
codegen.processOpts();
assertEquals(codegen.additionalProperties().get("javaxPackage"), "javax");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
package org.openapitools.codegen.kotlin;

import org.junit.Test;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.TestUtils;
import org.openapitools.codegen.languages.KotlinServerCodegen;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import static org.openapitools.codegen.CodegenConstants.LIBRARY;
import static org.openapitools.codegen.languages.AbstractKotlinCodegen.USE_JAKARTA_EE;
import static org.openapitools.codegen.languages.KotlinServerCodegen.Constants.JAXRS_SPEC;
import static org.openapitools.codegen.TestUtils.assertFileContains;
import static org.openapitools.codegen.TestUtils.assertFileNotContains;
import static org.openapitools.codegen.languages.features.BeanValidationFeatures.USE_BEANVALIDATION;

public class KotlinServerCodegenTest {

@Test
public void javaxImports() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();

KotlinServerCodegen codegen = new KotlinServerCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(LIBRARY, JAXRS_SPEC);

new DefaultGenerator().opts(new ClientOptInput()
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml"))
.config(codegen))
.generate();

String outputPath = output.getAbsolutePath() + "/src/main/kotlin/org/openapitools/server";
Path petApi = Paths.get(outputPath + "/apis/PetApi.kt");
assertFileNotContains(
petApi,
"import jakarta.ws.rs.*",
"import jakarta.ws.rs.core.Response",
"@jakarta.annotation.Generated(value = arrayOf(\"org.openapitools.codegen.languages.KotlinServerCodegen\"))"
);
assertFileContains(
petApi,
"import javax.ws.rs.*",
"import javax.ws.rs.core.Response",
"@javax.annotation.Generated(value = arrayOf(\"org.openapitools.codegen.languages.KotlinServerCodegen\"))"
);
}

@Test
public void jakartaEeImports() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();

KotlinServerCodegen codegen = new KotlinServerCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(USE_JAKARTA_EE, true);
codegen.additionalProperties().put(LIBRARY, JAXRS_SPEC);

new DefaultGenerator().opts(new ClientOptInput()
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml"))
.config(codegen))
.generate();

String outputPath = output.getAbsolutePath() + "/src/main/kotlin/org/openapitools/server";
Path petApi = Paths.get(outputPath + "/apis/PetApi.kt");
assertFileContains(
petApi,
"import jakarta.ws.rs.*",
"import jakarta.ws.rs.core.Response",
"@jakarta.annotation.Generated(value = arrayOf(\"org.openapitools.codegen.languages.KotlinServerCodegen\"))"
);
assertFileNotContains(
petApi,
"import javax.ws.rs.*",
"import javax.ws.rs.core.Response",
"@javax.annotation.Generated(value = arrayOf(\"org.openapitools.codegen.languages.KotlinServerCodegen\"))"
);
}

@Test
public void beanValidationJavaxImports() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();

KotlinServerCodegen codegen = new KotlinServerCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(LIBRARY, JAXRS_SPEC);
codegen.additionalProperties().put(USE_BEANVALIDATION, true);

new DefaultGenerator().opts(new ClientOptInput()
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml"))
.config(codegen))
.generate();

String outputPath = output.getAbsolutePath() + "/src/main/kotlin/org/openapitools/server";
Path petApi = Paths.get(outputPath + "/apis/PetApi.kt");
assertFileNotContains(
petApi,
"import jakarta.validation.Valid",
"import jakarta.validation.Valid"
);
assertFileContains(
petApi,
"import javax.validation.constraints.*",
"import javax.validation.Valid"
);

Path petModel = Paths.get(outputPath + "/models/Pet.kt");
assertFileNotContains(
petApi,
"import jakarta.validation.Valid",
"import jakarta.validation.Valid"
);
assertFileContains(
petApi,
"import javax.validation.constraints.*",
"import javax.validation.Valid"
);
}

@Test
public void beanValidationJakartaEeImports() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();

KotlinServerCodegen codegen = new KotlinServerCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(USE_JAKARTA_EE, true);
codegen.additionalProperties().put(LIBRARY, JAXRS_SPEC);
codegen.additionalProperties().put(USE_BEANVALIDATION, true);

new DefaultGenerator().opts(new ClientOptInput()
.openAPI(TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml"))
.config(codegen))
.generate();

String outputPath = output.getAbsolutePath() + "/src/main/kotlin/org/openapitools/server";
Path petApi = Paths.get(outputPath + "/apis/PetApi.kt");
assertFileContains(
petApi,
"import jakarta.validation.Valid",
"import jakarta.validation.Valid"
);
assertFileNotContains(
petApi,
"import javax.validation.constraints.*",
"import javax.validation.Valid"
);

Path petModel = Paths.get(outputPath + "/models/Pet.kt");
assertFileContains(
petModel,
"import jakarta.validation.Valid",
"import jakarta.validation.Valid"
);
assertFileNotContains(
petModel,
"import javax.validation.constraints.*",
"import javax.validation.Valid"
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ wrapper {

buildscript {
ext.kotlin_version = "1.4.32"
ext.jakarta_ws_rs_version = "2.1.6"
ext.swagger_annotations_version = "1.5.3"
ext.jakarta_annotations_version = "1.3.5"
ext.jakarta_ws_rs_version = "2.1.6"
ext.jackson_version = "2.9.9"
repositories {
maven { url "https://repo1.maven.org/maven2" }
Expand Down

0 comments on commit 9890f07

Please sign in to comment.