From aa454419182d0f3c0bce246e823fa9c947251fbb Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Wed, 4 Dec 2024 17:45:09 +0200 Subject: [PATCH 1/9] [Kotlin Server] Update Ktor to version 3 --- .../languages/KotlinServerCodegen.java | 6 +++ .../kotlin-server/data_class.mustache | 20 ++-------- .../libraries/ktor/ApiKeyAuth.kt.mustache | 2 +- .../libraries/ktor/AppMain.kt.mustache | 21 ++++------ .../libraries/ktor/Paths.kt.mustache | 4 +- .../libraries/ktor/_principal.mustache | 6 +-- .../libraries/ktor/_response.mustache | 2 +- .../kotlin-server/libraries/ktor/api.mustache | 2 - .../libraries/ktor/build.gradle.kts.mustache | 5 ++- .../libraries/ktor/gradle.properties | 2 +- .../build.gradle.kts | 5 ++- .../gradle.properties | 2 +- .../kotlin/org/openapitools/server/AppMain.kt | 11 +---- .../kotlin/org/openapitools/server/Paths.kt | 40 +++++++++---------- .../org/openapitools/server/apis/PetApi.kt | 26 ++++++------ .../org/openapitools/server/apis/StoreApi.kt | 8 ++-- .../org/openapitools/server/apis/UserApi.kt | 4 +- .../openapitools/server/models/Category.kt | 4 +- .../server/models/ModelApiResponse.kt | 4 +- .../org/openapitools/server/models/Order.kt | 6 ++- .../org/openapitools/server/models/Pet.kt | 4 +- .../org/openapitools/server/models/Tag.kt | 4 +- .../org/openapitools/server/models/User.kt | 4 +- .../org/openapitools/server/models/Pet.kt | 4 +- .../openapitools/server/models/Category.kt | 4 +- .../server/models/ModelApiResponse.kt | 4 +- .../org/openapitools/server/models/Order.kt | 4 +- .../org/openapitools/server/models/Pet.kt | 4 +- .../org/openapitools/server/models/Tag.kt | 4 +- .../org/openapitools/server/models/User.kt | 4 +- .../openapitools/server/models/Category.kt | 4 +- .../server/models/ModelApiResponse.kt | 4 +- .../org/openapitools/server/models/Order.kt | 4 +- .../org/openapitools/server/models/Pet.kt | 4 +- .../org/openapitools/server/models/Tag.kt | 4 +- .../org/openapitools/server/models/User.kt | 4 +- .../kotlin-server/ktor/build.gradle.kts | 5 ++- .../kotlin-server/ktor/gradle.properties | 2 +- .../kotlin/org/openapitools/server/AppMain.kt | 11 +---- .../kotlin/org/openapitools/server/Paths.kt | 40 +++++++++---------- .../org/openapitools/server/apis/PetApi.kt | 26 ++++++------ .../org/openapitools/server/apis/StoreApi.kt | 8 ++-- .../org/openapitools/server/apis/UserApi.kt | 4 +- .../openapitools/server/models/Category.kt | 8 ++-- .../server/models/ModelApiResponse.kt | 8 ++-- .../org/openapitools/server/models/Order.kt | 10 ++--- .../org/openapitools/server/models/Pet.kt | 8 ++-- .../org/openapitools/server/models/Tag.kt | 8 ++-- .../org/openapitools/server/models/User.kt | 8 ++-- 49 files changed, 187 insertions(+), 203 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 2fc9871b9f59..5f5601968e98 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -225,6 +225,11 @@ public void processOpts() { LOGGER.info("`library` option is empty. Default to {}", DEFAULT_LIBRARY); } + if (isKtor()) { + typeMapping.put("date-time", "kotlin.String"); + typeMapping.put("DateTime", "kotlin.String"); + } + if (additionalProperties.containsKey(Constants.AUTOMATIC_HEAD_REQUESTS)) { setAutoHeadFeatureEnabled(convertPropertyToBooleanAndWriteBack(Constants.AUTOMATIC_HEAD_REQUESTS)); } else { @@ -353,6 +358,7 @@ public static class Constants { public static final String USE_MUTINY_DESC = "Whether to use Mutiny (should not be used with useCoroutines). This option is currently supported only when using jaxrs-spec library."; public static final String OMIT_GRADLE_WRAPPER = "omitGradleWrapper"; public static final String OMIT_GRADLE_WRAPPER_DESC = "Whether to omit Gradle wrapper for creating a sub project."; + public static final String KOTLIN_SERIALIZATION = "kotlinSerialization"; } @Override diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache index ea72ac7c116d..0f8615de28d9 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache @@ -1,35 +1,21 @@ -{{#parcelizeModels}} -import android.os.Parcelable -import kotlinx.parcelize.Parcelize - -{{/parcelizeModels}} -{{#serializableModel}} -import java.io.Serializable -{{/serializableModel}} +import kotlinx.serialization.Serializable /** * {{{description}}} {{#vars}} * @param {{{name}}} {{{description}}} {{/vars}} */ -{{#parcelizeModels}} -@Parcelize -{{/parcelizeModels}} +@Serializable {{#hasVars}}data {{/hasVars}}class {{classname}}( {{#requiredVars}} {{>data_class_req_var}}{{^-last}}, {{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}}, {{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>data_class_opt_var}}{{^-last}}, {{/-last}}{{/optionalVars}} -) {{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}} +) {{#vendorExtensions.x-has-data-class-body}} { {{/vendorExtensions.x-has-data-class-body}} -{{#serializableModel}} - companion object { - private const val serialVersionUID: Long = 123 - } -{{/serializableModel}} {{#hasEnums}} {{#vars}} {{#isEnum}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache index c2cad7fe7a7f..542744384a71 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/ApiKeyAuth.kt.mustache @@ -1,4 +1,4 @@ -package org.openapitools.server.infrastructure +package {{packageName}}.infrastructure import io.ktor.http.auth.* import io.ktor.server.application.* diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache index 5ba3775c92cf..870ec720e139 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache @@ -1,7 +1,6 @@ package {{packageName}} import io.ktor.server.application.* -import io.ktor.serialization.gson.* import io.ktor.http.* {{#featureResources}} import io.ktor.server.resources.* @@ -30,24 +29,19 @@ import java.util.concurrent.TimeUnit {{/featureMetrics}} import io.ktor.server.routing.* {{#hasAuthMethods}} +{{#kotlinSerialization}} +import io.ktor.serialization.kotlinx.json.json +{{/kotlinSerialization}} import com.typesafe.config.ConfigFactory import io.ktor.client.HttpClient import io.ktor.client.engine.apache.Apache import io.ktor.server.config.HoconApplicationConfig import io.ktor.server.auth.* -import org.openapitools.server.infrastructure.* +import {{packageName}}.infrastructure.* {{/hasAuthMethods}} {{#generateApis}}{{#apiInfo}}{{#apis}}import {{apiPackage}}.{{classname}} {{/apis}}{{/apiInfo}}{{/generateApis}} -{{#hasAuthMethods}} -internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) - -object HTTP { - val client = HttpClient(Apache) -} -{{/hasAuthMethods}} - fun Application.main() { install(DefaultHeaders) {{#featureMetrics}} @@ -62,7 +56,9 @@ fun Application.main() { {{/featureMetrics}} {{#generateApis}} install(ContentNegotiation) { - register(ContentType.Application.Json, GsonConverter()) + {{#kotlinSerialization}} + json() + {{/kotlinSerialization}} } {{#featureAutoHead}} install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html @@ -125,7 +121,7 @@ fun Application.main() { {{/authMethods}} } {{/hasAuthMethods}} - install(Routing) { + routing { {{#apiInfo}} {{#apis}} {{#operations}} @@ -134,6 +130,5 @@ fun Application.main() { {{/apis}} {{/apiInfo}} } - {{/generateApis}} } diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache index a575ea678772..48c8a7e49d88 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache @@ -18,10 +18,10 @@ object Paths { {{#allParams}}* @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}} {{/allParams}}*/ {{#hasParams}} - @Serializable @Resource("{{{path}}}") class {{operationId}}({{#allParams}}val {{paramName}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/allParams}}) + @Resource("{{{path}}}") class {{operationId}}({{#pathParams}}val {{paramName}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/pathParams}}) {{/hasParams}} {{^hasParams}} - @Serializable @Resource("{{{path}}}") class {{operationId}} + @Resource("{{{path}}}") class {{operationId}} {{/hasParams}} {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache index 17c32a4c40a2..ad01dd85aa75 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_principal.mustache @@ -1,10 +1,10 @@ {{#authMethods}} {{#isBasicBasic}} -val principal = call.authentication.principal()!! +val principal = call.authentication.principal() {{/isBasicBasic}}{{^isBasicBasic}}{{#isApiKey}} -val principal = call.authentication.principal()!! +val principal = call.authentication.principal() {{/isApiKey}}{{^isApiKey}}{{#isOAuth}} -val principal = call.authentication.principal()!! +val principal = call.authentication.principal() {{/isOAuth}}{{^isOAuth}} val principal = null!! {{/isOAuth}}{{/isApiKey}}{{/isBasicBasic}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache index 931dad98f5e1..323f266e8256 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/_response.mustache @@ -2,7 +2,7 @@ val exampleContentType = "{{{contentType}}}" val exampleContentString = """{{&example}}""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache index eb1da3bd527d..885ba6ae50dc 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/api.mustache @@ -1,7 +1,6 @@ {{>licenseInfo}} package {{apiPackage}} -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -23,7 +22,6 @@ import {{packageName}}.infrastructure.ApiPrincipal {{#operations}} fun Route.{{classname}}() { - val gson = Gson() val empty = mutableMapOf() {{#operation}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache index 3dc3dd38f043..268c54c5093a 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache @@ -7,7 +7,8 @@ version = "{{artifactVersion}}" plugins { kotlin("jvm") version "2.0.20" - id("io.ktor.plugin") version "2.3.12" + id("io.ktor.plugin") version "3.0.2" + kotlin("plugin.serialization") version "2.0.20" } application { @@ -35,7 +36,7 @@ dependencies { {{/featureAutoHead}} implementation("io.ktor:ktor-server-default-headers") implementation("io.ktor:ktor-server-content-negotiation") - implementation("io.ktor:ktor-serialization-gson") + implementation("io.ktor:ktor-serialization-kotlinx-json") {{#featureResources}} implementation("io.ktor:ktor-server-resources") {{/featureResources}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/gradle.properties b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/gradle.properties index d507b58c1c87..fb877a9edd28 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/gradle.properties +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/gradle.properties @@ -1,4 +1,4 @@ kotlin.code.style=official -ktor_version=2.3.12 +ktor_version=3.0.2 kotlin_version=2.0.20 logback_version=1.4.14 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts b/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts index fb35b77164a8..ac3166e2f3a2 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts +++ b/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts @@ -7,7 +7,8 @@ version = "1.0.0" plugins { kotlin("jvm") version "2.0.20" - id("io.ktor.plugin") version "2.3.12" + id("io.ktor.plugin") version "3.0.2" + kotlin("plugin.serialization") version "2.0.20" } application { @@ -29,7 +30,7 @@ dependencies { implementation("io.ktor:ktor-server-auto-head-response") implementation("io.ktor:ktor-server-default-headers") implementation("io.ktor:ktor-server-content-negotiation") - implementation("io.ktor:ktor-serialization-gson") + implementation("io.ktor:ktor-serialization-kotlinx-json") implementation("io.ktor:ktor-server-resources") implementation("io.ktor:ktor-server-hsts") implementation("io.ktor:ktor-server-compression") diff --git a/samples/server/petstore/kotlin-server-modelMutable/gradle.properties b/samples/server/petstore/kotlin-server-modelMutable/gradle.properties index d507b58c1c87..fb877a9edd28 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/gradle.properties +++ b/samples/server/petstore/kotlin-server-modelMutable/gradle.properties @@ -1,4 +1,4 @@ kotlin.code.style=official -ktor_version=2.3.12 +ktor_version=3.0.2 kotlin_version=2.0.20 logback_version=1.4.14 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt index 2de9d58ce937..5ea257e8c473 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt @@ -1,7 +1,6 @@ package org.openapitools.server import io.ktor.server.application.* -import io.ktor.serialization.gson.* import io.ktor.http.* import io.ktor.server.resources.* import io.ktor.server.plugins.autohead.* @@ -24,12 +23,6 @@ import org.openapitools.server.apis.StoreApi import org.openapitools.server.apis.UserApi -internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) - -object HTTP { - val client = HttpClient(Apache) -} - fun Application.main() { install(DefaultHeaders) install(DropwizardMetrics) { @@ -41,7 +34,6 @@ fun Application.main() { reporter.start(10, TimeUnit.SECONDS) } install(ContentNegotiation) { - register(ContentType.Application.Json, GsonConverter()) } install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html install(Compression, ApplicationCompressionConfiguration()) // see https://ktor.io/docs/compression.html @@ -66,10 +58,9 @@ fun Application.main() { } } } - install(Routing) { + routing { PetApi() StoreApi() UserApi() } - } diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt index effea4faa7aa..96b4afcaa488 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt @@ -21,7 +21,7 @@ object Paths { * * @param body Pet object that needs to be added to the store */ - @Serializable @Resource("/pet") class addPet(val body: Pet) + @Resource("/pet") class addPet() /** * Deletes a pet @@ -29,35 +29,35 @@ object Paths { * @param petId Pet id to delete * @param apiKey (optional) */ - @Serializable @Resource("/pet/{petId}") class deletePet(val petId: kotlin.Long, val apiKey: kotlin.String? = null) + @Resource("/pet/{petId}") class deletePet(val petId: kotlin.Long) /** * Finds Pets by status * Multiple status values can be provided with comma separated strings * @param status Status values that need to be considered for filter */ - @Serializable @Resource("/pet/findByStatus") class findPetsByStatus(val status: kotlin.collections.MutableList) + @Resource("/pet/findByStatus") class findPetsByStatus() /** * Finds Pets by tags * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * @param tags Tags to filter by */ - @Serializable @Resource("/pet/findByTags") class findPetsByTags(val tags: kotlin.collections.MutableList) + @Resource("/pet/findByTags") class findPetsByTags() /** * Find pet by ID * Returns a single pet * @param petId ID of pet to return */ - @Serializable @Resource("/pet/{petId}") class getPetById(val petId: kotlin.Long) + @Resource("/pet/{petId}") class getPetById(val petId: kotlin.Long) /** * Update an existing pet * * @param body Pet object that needs to be added to the store */ - @Serializable @Resource("/pet") class updatePet(val body: Pet) + @Resource("/pet") class updatePet() /** * Updates a pet in the store with form data @@ -66,7 +66,7 @@ object Paths { * @param name Updated name of the pet (optional) * @param status Updated status of the pet (optional) */ - @Serializable @Resource("/pet/{petId}") class updatePetWithForm(val petId: kotlin.Long, val name: kotlin.String? = null, val status: kotlin.String? = null) + @Resource("/pet/{petId}") class updatePetWithForm(val petId: kotlin.Long) /** * uploads an image @@ -75,69 +75,69 @@ object Paths { * @param additionalMetadata Additional data to pass to server (optional) * @param file file to upload (optional) */ - @Serializable @Resource("/pet/{petId}/uploadImage") class uploadFile(val petId: kotlin.Long, val additionalMetadata: kotlin.String? = null, val file: java.io.File? = null) + @Resource("/pet/{petId}/uploadImage") class uploadFile(val petId: kotlin.Long) /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * @param orderId ID of the order that needs to be deleted */ - @Serializable @Resource("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String) + @Resource("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String) /** * Returns pet inventories by status * Returns a map of status codes to quantities */ - @Serializable @Resource("/store/inventory") class getInventory + @Resource("/store/inventory") class getInventory /** * Find purchase order by ID * For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions * @param orderId ID of pet that needs to be fetched */ - @Serializable @Resource("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) + @Resource("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) /** * Place an order for a pet * * @param body order placed for purchasing the pet */ - @Serializable @Resource("/store/order") class placeOrder(val body: Order) + @Resource("/store/order") class placeOrder() /** * Create user * This can only be done by the logged in user. * @param body Created user object */ - @Serializable @Resource("/user") class createUser(val body: User) + @Resource("/user") class createUser() /** * Creates list of users with given input array * * @param body List of user object */ - @Serializable @Resource("/user/createWithArray") class createUsersWithArrayInput(val body: kotlin.collections.MutableList) + @Resource("/user/createWithArray") class createUsersWithArrayInput() /** * Creates list of users with given input array * * @param body List of user object */ - @Serializable @Resource("/user/createWithList") class createUsersWithListInput(val body: kotlin.collections.MutableList) + @Resource("/user/createWithList") class createUsersWithListInput() /** * Delete user * This can only be done by the logged in user. * @param username The name that needs to be deleted */ - @Serializable @Resource("/user/{username}") class deleteUser(val username: kotlin.String) + @Resource("/user/{username}") class deleteUser(val username: kotlin.String) /** * Get user by user name * * @param username The name that needs to be fetched. Use user1 for testing. */ - @Serializable @Resource("/user/{username}") class getUserByName(val username: kotlin.String) + @Resource("/user/{username}") class getUserByName(val username: kotlin.String) /** * Logs user into the system @@ -145,13 +145,13 @@ object Paths { * @param username The user name for login * @param password The password for login in clear text */ - @Serializable @Resource("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String) + @Resource("/user/login") class loginUser() /** * Logs out current logged in user session * */ - @Serializable @Resource("/user/logout") class logoutUser + @Resource("/user/logout") class logoutUser /** * Updated user @@ -159,6 +159,6 @@ object Paths { * @param username name that need to be deleted * @param body Updated user object */ - @Serializable @Resource("/user/{username}") class updateUser(val username: kotlin.String, val body: User) + @Resource("/user/{username}") class updateUser(val username: kotlin.String) } diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/PetApi.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/PetApi.kt index d95a4b4d0883..b72ec0d72cec 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/PetApi.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/PetApi.kt @@ -11,7 +11,6 @@ */ package org.openapitools.server.apis -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -30,13 +29,12 @@ import org.openapitools.server.models.ModelApiResponse import org.openapitools.server.models.Pet fun Route.PetApi() { - val gson = Gson() val empty = mutableMapOf() authenticate("petstore_auth") { post { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -47,7 +45,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { delete { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -58,7 +56,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -97,7 +95,7 @@ fun Route.PetApi() { } ]""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -108,7 +106,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -147,7 +145,7 @@ fun Route.PetApi() { } ]""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -158,7 +156,7 @@ fun Route.PetApi() { authenticate("api_key") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -181,7 +179,7 @@ fun Route.PetApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -192,7 +190,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { put { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -203,7 +201,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { post { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -214,7 +212,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { post { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -225,7 +223,7 @@ fun Route.PetApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt index fe780f7feb46..4a4395778401 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt @@ -11,7 +11,6 @@ */ package org.openapitools.server.apis -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -29,7 +28,6 @@ import org.openapitools.server.infrastructure.ApiPrincipal import org.openapitools.server.models.Order fun Route.StoreApi() { - val gson = Gson() val empty = mutableMapOf() delete { @@ -40,7 +38,7 @@ fun Route.StoreApi() { authenticate("api_key") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -60,7 +58,7 @@ fun Route.StoreApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -79,7 +77,7 @@ fun Route.StoreApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/UserApi.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/UserApi.kt index ccf0509fca2e..299f743e141d 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/UserApi.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/apis/UserApi.kt @@ -11,7 +11,6 @@ */ package org.openapitools.server.apis -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -29,7 +28,6 @@ import org.openapitools.server.infrastructure.ApiPrincipal import org.openapitools.server.models.User fun Route.UserApi() { - val gson = Gson() val empty = mutableMapOf() post { @@ -66,7 +64,7 @@ fun Route.UserApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt index 949cf3a7a5a0..82813cdbff3e 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,13 +12,15 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ +@Serializable data class Category( var id: kotlin.Long? = null, var name: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 7a0ac1f246df..dcc1ed13510b 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,15 +12,17 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ +@Serializable data class ModelApiResponse( var code: kotlin.Int? = null, var type: kotlin.String? = null, var message: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt index c691b645c43d..d5a9b56748f7 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -21,15 +22,16 @@ package org.openapitools.server.models * @param status Order Status * @param complete */ +@Serializable data class Order( var id: kotlin.Long? = null, var petId: kotlin.Long? = null, var quantity: kotlin.Int? = null, - var shipDate: java.time.OffsetDateTime? = null, + var shipDate: kotlin.String? = null, /* Order Status */ var status: Order.Status? = null, var complete: kotlin.Boolean? = false -) +) { /** * Order Status diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt index e12a818c1b57..e9095e0a7c60 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,6 +14,7 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag +import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -23,6 +24,7 @@ import org.openapitools.server.models.Tag * @param tags * @param status pet status in the store */ +@Serializable data class Pet( var name: kotlin.String, var photoUrls: kotlin.collections.MutableList, @@ -31,7 +33,7 @@ data class Pet( var tags: kotlin.collections.MutableList? = null, /* pet status in the store */ var status: Pet.Status? = null -) +) { /** * pet status in the store diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt index 99e770cd7b9f..26a16d0acc37 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,13 +12,15 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ +@Serializable data class Tag( var id: kotlin.Long? = null, var name: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt index e63e2596d4bf..57f4e607386a 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -23,6 +24,7 @@ package org.openapitools.server.models * @param phone * @param userStatus User Status */ +@Serializable data class User( var id: kotlin.Long? = null, var username: kotlin.String? = null, @@ -33,5 +35,5 @@ data class User( var phone: kotlin.String? = null, /* User Status */ var userStatus: kotlin.Int? = null -) +) diff --git a/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt index 8dddb90062b1..5266d4aaa2f1 100644 --- a/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * * @param notNullableRequired @@ -19,10 +20,11 @@ package org.openapitools.server.models * @param nullableNotRequired * @param notNullableNotRequired */ +@Serializable data class Pet( val notNullableRequired: kotlin.String, val nullableRequired: kotlin.String?, val nullableNotRequired: kotlin.String? = null, val notNullableNotRequired: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt index 71098339bc80..0c3ccfcfe850 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,13 +12,15 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ +@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 9e80c50c6604..5ecc51991934 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,15 +12,17 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ +@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, val message: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt index be802beb8d80..d015eb6b780a 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -21,6 +22,7 @@ package org.openapitools.server.models * @param status Order Status * @param complete */ +@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, @@ -29,7 +31,7 @@ data class Order( /* Order Status */ val status: Order.Status? = null, val complete: kotlin.Boolean? = false -) +) { /** * Order Status diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt index e5723fedd633..929d729b09bb 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,6 +14,7 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag +import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -23,6 +24,7 @@ import org.openapitools.server.models.Tag * @param tags * @param status pet status in the store */ +@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, @@ -31,7 +33,7 @@ data class Pet( val tags: kotlin.collections.List? = null, /* pet status in the store */ val status: Pet.Status? = null -) +) { /** * pet status in the store diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt index 0a975290485e..76749aca3f4d 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,13 +12,15 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ +@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt index a4742582f463..26757f921f43 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -23,6 +24,7 @@ package org.openapitools.server.models * @param phone * @param userStatus User Status */ +@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, @@ -33,5 +35,5 @@ data class User( val phone: kotlin.String? = null, /* User Status */ val userStatus: kotlin.Int? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt index 71098339bc80..0c3ccfcfe850 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,13 +12,15 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ +@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 9e80c50c6604..5ecc51991934 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,15 +12,17 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ +@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, val message: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt index be802beb8d80..d015eb6b780a 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -21,6 +22,7 @@ package org.openapitools.server.models * @param status Order Status * @param complete */ +@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, @@ -29,7 +31,7 @@ data class Order( /* Order Status */ val status: Order.Status? = null, val complete: kotlin.Boolean? = false -) +) { /** * Order Status diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt index e5723fedd633..929d729b09bb 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,6 +14,7 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag +import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -23,6 +24,7 @@ import org.openapitools.server.models.Tag * @param tags * @param status pet status in the store */ +@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, @@ -31,7 +33,7 @@ data class Pet( val tags: kotlin.collections.List? = null, /* pet status in the store */ val status: Pet.Status? = null -) +) { /** * pet status in the store diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt index 0a975290485e..76749aca3f4d 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,13 +12,15 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ +@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null -) +) diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt index a4742582f463..26757f921f43 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -23,6 +24,7 @@ package org.openapitools.server.models * @param phone * @param userStatus User Status */ +@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, @@ -33,5 +35,5 @@ data class User( val phone: kotlin.String? = null, /* User Status */ val userStatus: kotlin.Int? = null -) +) diff --git a/samples/server/petstore/kotlin-server/ktor/build.gradle.kts b/samples/server/petstore/kotlin-server/ktor/build.gradle.kts index fb35b77164a8..ac3166e2f3a2 100644 --- a/samples/server/petstore/kotlin-server/ktor/build.gradle.kts +++ b/samples/server/petstore/kotlin-server/ktor/build.gradle.kts @@ -7,7 +7,8 @@ version = "1.0.0" plugins { kotlin("jvm") version "2.0.20" - id("io.ktor.plugin") version "2.3.12" + id("io.ktor.plugin") version "3.0.2" + kotlin("plugin.serialization") version "2.0.20" } application { @@ -29,7 +30,7 @@ dependencies { implementation("io.ktor:ktor-server-auto-head-response") implementation("io.ktor:ktor-server-default-headers") implementation("io.ktor:ktor-server-content-negotiation") - implementation("io.ktor:ktor-serialization-gson") + implementation("io.ktor:ktor-serialization-kotlinx-json") implementation("io.ktor:ktor-server-resources") implementation("io.ktor:ktor-server-hsts") implementation("io.ktor:ktor-server-compression") diff --git a/samples/server/petstore/kotlin-server/ktor/gradle.properties b/samples/server/petstore/kotlin-server/ktor/gradle.properties index d507b58c1c87..fb877a9edd28 100644 --- a/samples/server/petstore/kotlin-server/ktor/gradle.properties +++ b/samples/server/petstore/kotlin-server/ktor/gradle.properties @@ -1,4 +1,4 @@ kotlin.code.style=official -ktor_version=2.3.12 +ktor_version=3.0.2 kotlin_version=2.0.20 logback_version=1.4.14 \ No newline at end of file diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt index 2de9d58ce937..5ea257e8c473 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt @@ -1,7 +1,6 @@ package org.openapitools.server import io.ktor.server.application.* -import io.ktor.serialization.gson.* import io.ktor.http.* import io.ktor.server.resources.* import io.ktor.server.plugins.autohead.* @@ -24,12 +23,6 @@ import org.openapitools.server.apis.StoreApi import org.openapitools.server.apis.UserApi -internal val settings = HoconApplicationConfig(ConfigFactory.defaultApplication(HTTP::class.java.classLoader)) - -object HTTP { - val client = HttpClient(Apache) -} - fun Application.main() { install(DefaultHeaders) install(DropwizardMetrics) { @@ -41,7 +34,6 @@ fun Application.main() { reporter.start(10, TimeUnit.SECONDS) } install(ContentNegotiation) { - register(ContentType.Application.Json, GsonConverter()) } install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html install(Compression, ApplicationCompressionConfiguration()) // see https://ktor.io/docs/compression.html @@ -66,10 +58,9 @@ fun Application.main() { } } } - install(Routing) { + routing { PetApi() StoreApi() UserApi() } - } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt index 4a9c3bb01944..96b4afcaa488 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt @@ -21,7 +21,7 @@ object Paths { * * @param body Pet object that needs to be added to the store */ - @Serializable @Resource("/pet") class addPet(val body: Pet) + @Resource("/pet") class addPet() /** * Deletes a pet @@ -29,35 +29,35 @@ object Paths { * @param petId Pet id to delete * @param apiKey (optional) */ - @Serializable @Resource("/pet/{petId}") class deletePet(val petId: kotlin.Long, val apiKey: kotlin.String? = null) + @Resource("/pet/{petId}") class deletePet(val petId: kotlin.Long) /** * Finds Pets by status * Multiple status values can be provided with comma separated strings * @param status Status values that need to be considered for filter */ - @Serializable @Resource("/pet/findByStatus") class findPetsByStatus(val status: kotlin.collections.List) + @Resource("/pet/findByStatus") class findPetsByStatus() /** * Finds Pets by tags * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * @param tags Tags to filter by */ - @Serializable @Resource("/pet/findByTags") class findPetsByTags(val tags: kotlin.collections.List) + @Resource("/pet/findByTags") class findPetsByTags() /** * Find pet by ID * Returns a single pet * @param petId ID of pet to return */ - @Serializable @Resource("/pet/{petId}") class getPetById(val petId: kotlin.Long) + @Resource("/pet/{petId}") class getPetById(val petId: kotlin.Long) /** * Update an existing pet * * @param body Pet object that needs to be added to the store */ - @Serializable @Resource("/pet") class updatePet(val body: Pet) + @Resource("/pet") class updatePet() /** * Updates a pet in the store with form data @@ -66,7 +66,7 @@ object Paths { * @param name Updated name of the pet (optional) * @param status Updated status of the pet (optional) */ - @Serializable @Resource("/pet/{petId}") class updatePetWithForm(val petId: kotlin.Long, val name: kotlin.String? = null, val status: kotlin.String? = null) + @Resource("/pet/{petId}") class updatePetWithForm(val petId: kotlin.Long) /** * uploads an image @@ -75,69 +75,69 @@ object Paths { * @param additionalMetadata Additional data to pass to server (optional) * @param file file to upload (optional) */ - @Serializable @Resource("/pet/{petId}/uploadImage") class uploadFile(val petId: kotlin.Long, val additionalMetadata: kotlin.String? = null, val file: java.io.File? = null) + @Resource("/pet/{petId}/uploadImage") class uploadFile(val petId: kotlin.Long) /** * Delete purchase order by ID * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * @param orderId ID of the order that needs to be deleted */ - @Serializable @Resource("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String) + @Resource("/store/order/{orderId}") class deleteOrder(val orderId: kotlin.String) /** * Returns pet inventories by status * Returns a map of status codes to quantities */ - @Serializable @Resource("/store/inventory") class getInventory + @Resource("/store/inventory") class getInventory /** * Find purchase order by ID * For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions * @param orderId ID of pet that needs to be fetched */ - @Serializable @Resource("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) + @Resource("/store/order/{orderId}") class getOrderById(val orderId: kotlin.Long) /** * Place an order for a pet * * @param body order placed for purchasing the pet */ - @Serializable @Resource("/store/order") class placeOrder(val body: Order) + @Resource("/store/order") class placeOrder() /** * Create user * This can only be done by the logged in user. * @param body Created user object */ - @Serializable @Resource("/user") class createUser(val body: User) + @Resource("/user") class createUser() /** * Creates list of users with given input array * * @param body List of user object */ - @Serializable @Resource("/user/createWithArray") class createUsersWithArrayInput(val body: kotlin.collections.List) + @Resource("/user/createWithArray") class createUsersWithArrayInput() /** * Creates list of users with given input array * * @param body List of user object */ - @Serializable @Resource("/user/createWithList") class createUsersWithListInput(val body: kotlin.collections.List) + @Resource("/user/createWithList") class createUsersWithListInput() /** * Delete user * This can only be done by the logged in user. * @param username The name that needs to be deleted */ - @Serializable @Resource("/user/{username}") class deleteUser(val username: kotlin.String) + @Resource("/user/{username}") class deleteUser(val username: kotlin.String) /** * Get user by user name * * @param username The name that needs to be fetched. Use user1 for testing. */ - @Serializable @Resource("/user/{username}") class getUserByName(val username: kotlin.String) + @Resource("/user/{username}") class getUserByName(val username: kotlin.String) /** * Logs user into the system @@ -145,13 +145,13 @@ object Paths { * @param username The user name for login * @param password The password for login in clear text */ - @Serializable @Resource("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String) + @Resource("/user/login") class loginUser() /** * Logs out current logged in user session * */ - @Serializable @Resource("/user/logout") class logoutUser + @Resource("/user/logout") class logoutUser /** * Updated user @@ -159,6 +159,6 @@ object Paths { * @param username name that need to be deleted * @param body Updated user object */ - @Serializable @Resource("/user/{username}") class updateUser(val username: kotlin.String, val body: User) + @Resource("/user/{username}") class updateUser(val username: kotlin.String) } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt index d95a4b4d0883..b72ec0d72cec 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/PetApi.kt @@ -11,7 +11,6 @@ */ package org.openapitools.server.apis -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -30,13 +29,12 @@ import org.openapitools.server.models.ModelApiResponse import org.openapitools.server.models.Pet fun Route.PetApi() { - val gson = Gson() val empty = mutableMapOf() authenticate("petstore_auth") { post { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -47,7 +45,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { delete { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -58,7 +56,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -97,7 +95,7 @@ fun Route.PetApi() { } ]""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -108,7 +106,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -147,7 +145,7 @@ fun Route.PetApi() { } ]""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -158,7 +156,7 @@ fun Route.PetApi() { authenticate("api_key") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -181,7 +179,7 @@ fun Route.PetApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -192,7 +190,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { put { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -203,7 +201,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { post { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -214,7 +212,7 @@ fun Route.PetApi() { authenticate("petstore_auth") { post { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() val exampleContentType = "application/json" @@ -225,7 +223,7 @@ fun Route.PetApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt index fe780f7feb46..4a4395778401 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/StoreApi.kt @@ -11,7 +11,6 @@ */ package org.openapitools.server.apis -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -29,7 +28,6 @@ import org.openapitools.server.infrastructure.ApiPrincipal import org.openapitools.server.models.Order fun Route.StoreApi() { - val gson = Gson() val empty = mutableMapOf() delete { @@ -40,7 +38,7 @@ fun Route.StoreApi() { authenticate("api_key") { get { - val principal = call.authentication.principal()!! + val principal = call.authentication.principal() call.respond(HttpStatusCode.NotImplemented) @@ -60,7 +58,7 @@ fun Route.StoreApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } @@ -79,7 +77,7 @@ fun Route.StoreApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt index ccf0509fca2e..299f743e141d 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/apis/UserApi.kt @@ -11,7 +11,6 @@ */ package org.openapitools.server.apis -import com.google.gson.Gson import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -29,7 +28,6 @@ import org.openapitools.server.infrastructure.ApiPrincipal import org.openapitools.server.models.User fun Route.UserApi() { - val gson = Gson() val empty = mutableMapOf() post { @@ -66,7 +64,7 @@ fun Route.UserApi() { }""" when (exampleContentType) { - "application/json" -> call.respond(gson.fromJson(exampleContentString, empty::class.java)) + "application/json" -> call.respondText(exampleContentType, ContentType.Application.Json) "application/xml" -> call.respondText(exampleContentString, ContentType.Text.Xml) else -> call.respondText(exampleContentString) } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt index 9d8571921384..7647c2d227e0 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,19 +12,17 @@ package org.openapitools.server.models -import java.io.Serializable +import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ +@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null -) : Serializable +) { - companion object { - private const val serialVersionUID: Long = 123 - } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 5548175d9048..e16d42e86a4e 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,21 +12,19 @@ package org.openapitools.server.models -import java.io.Serializable +import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ +@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, val message: kotlin.String? = null -) : Serializable +) { - companion object { - private const val serialVersionUID: Long = 123 - } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt index 79dce95e1e47..b1a711510fc6 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,7 +12,7 @@ package org.openapitools.server.models -import java.io.Serializable +import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -22,19 +22,17 @@ import java.io.Serializable * @param status Order Status * @param complete */ +@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, val quantity: kotlin.Int? = null, - val shipDate: java.time.OffsetDateTime? = null, + val shipDate: kotlin.String? = null, /* Order Status */ val status: Order.Status? = null, val complete: kotlin.Boolean? = false -) : Serializable +) { - companion object { - private const val serialVersionUID: Long = 123 - } /** * Order Status * Values: placed,approved,delivered diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt index 8b98ce0469c5..8fe934cc3ff3 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,7 +14,7 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag -import java.io.Serializable +import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -24,6 +24,7 @@ import java.io.Serializable * @param tags * @param status pet status in the store */ +@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, @@ -32,11 +33,8 @@ data class Pet( val tags: kotlin.collections.List? = null, /* pet status in the store */ val status: Pet.Status? = null -) : Serializable +) { - companion object { - private const val serialVersionUID: Long = 123 - } /** * pet status in the store * Values: available,pending,sold diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt index e9626b25c6d1..fae4d9d0ba3c 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,19 +12,17 @@ package org.openapitools.server.models -import java.io.Serializable +import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ +@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null -) : Serializable +) { - companion object { - private const val serialVersionUID: Long = 123 - } } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt index fdbdb4e1cff4..af04fd61c1cf 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,7 +12,7 @@ package org.openapitools.server.models -import java.io.Serializable +import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -24,6 +24,7 @@ import java.io.Serializable * @param phone * @param userStatus User Status */ +@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, @@ -34,10 +35,7 @@ data class User( val phone: kotlin.String? = null, /* User Status */ val userStatus: kotlin.Int? = null -) : Serializable +) { - companion object { - private const val serialVersionUID: Long = 123 - } } From 8779e1d449879c12ff4037d552bb9ffd16c90672 Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Wed, 4 Dec 2024 17:56:15 +0200 Subject: [PATCH 2/9] [Kotlin Server] Clean up --- .../openapitools/codegen/languages/KotlinServerCodegen.java | 1 - .../kotlin-server/libraries/ktor/AppMain.kt.mustache | 4 ---- .../src/main/kotlin/org/openapitools/server/AppMain.kt | 2 ++ .../ktor/src/main/kotlin/org/openapitools/server/AppMain.kt | 2 ++ 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 5f5601968e98..384f8a1ca735 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -358,7 +358,6 @@ public static class Constants { public static final String USE_MUTINY_DESC = "Whether to use Mutiny (should not be used with useCoroutines). This option is currently supported only when using jaxrs-spec library."; public static final String OMIT_GRADLE_WRAPPER = "omitGradleWrapper"; public static final String OMIT_GRADLE_WRAPPER_DESC = "Whether to omit Gradle wrapper for creating a sub project."; - public static final String KOTLIN_SERIALIZATION = "kotlinSerialization"; } @Override diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache index 870ec720e139..02f870ac4303 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/AppMain.kt.mustache @@ -29,9 +29,7 @@ import java.util.concurrent.TimeUnit {{/featureMetrics}} import io.ktor.server.routing.* {{#hasAuthMethods}} -{{#kotlinSerialization}} import io.ktor.serialization.kotlinx.json.json -{{/kotlinSerialization}} import com.typesafe.config.ConfigFactory import io.ktor.client.HttpClient import io.ktor.client.engine.apache.Apache @@ -56,9 +54,7 @@ fun Application.main() { {{/featureMetrics}} {{#generateApis}} install(ContentNegotiation) { - {{#kotlinSerialization}} json() - {{/kotlinSerialization}} } {{#featureAutoHead}} install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt index 5ea257e8c473..4053d223ac9c 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/AppMain.kt @@ -12,6 +12,7 @@ import com.codahale.metrics.Slf4jReporter import io.ktor.server.metrics.dropwizard.* import java.util.concurrent.TimeUnit import io.ktor.server.routing.* +import io.ktor.serialization.kotlinx.json.json import com.typesafe.config.ConfigFactory import io.ktor.client.HttpClient import io.ktor.client.engine.apache.Apache @@ -34,6 +35,7 @@ fun Application.main() { reporter.start(10, TimeUnit.SECONDS) } install(ContentNegotiation) { + json() } install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html install(Compression, ApplicationCompressionConfiguration()) // see https://ktor.io/docs/compression.html diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt index 5ea257e8c473..4053d223ac9c 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/AppMain.kt @@ -12,6 +12,7 @@ import com.codahale.metrics.Slf4jReporter import io.ktor.server.metrics.dropwizard.* import java.util.concurrent.TimeUnit import io.ktor.server.routing.* +import io.ktor.serialization.kotlinx.json.json import com.typesafe.config.ConfigFactory import io.ktor.client.HttpClient import io.ktor.client.engine.apache.Apache @@ -34,6 +35,7 @@ fun Application.main() { reporter.start(10, TimeUnit.SECONDS) } install(ContentNegotiation) { + json() } install(AutoHeadResponse) // see https://ktor.io/docs/autoheadresponse.html install(Compression, ApplicationCompressionConfiguration()) // see https://ktor.io/docs/compression.html From 385e3a49e8a3363b6275f5570521132486306973 Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Fri, 6 Dec 2024 10:48:36 +0200 Subject: [PATCH 3/9] [Kotlin Server] Fix problems --- docs/generators/kotlin-server.md | 1 + .../languages/KotlinServerCodegen.java | 12 + .../kotlin-server/data_class.mustache | 18 +- .../okhttp-gson-3.1/.openapi-generator/FILES | 44 -- .../petstore/java/okhttp-gson-3.1/README.md | 46 +-- .../java/okhttp-gson-3.1/api/openapi.yaml | 378 ------------------ .../java/org/openapitools/client/JSON.java | 47 --- .../openapitools/server/models/Category.kt | 2 - .../server/models/ModelApiResponse.kt | 2 - .../org/openapitools/server/models/Order.kt | 2 - .../org/openapitools/server/models/Pet.kt | 2 - .../org/openapitools/server/models/Tag.kt | 2 - .../org/openapitools/server/models/User.kt | 2 - .../org/openapitools/server/models/Pet.kt | 2 - .../openapitools/server/models/Category.kt | 2 - .../server/models/ModelApiResponse.kt | 2 - .../org/openapitools/server/models/Order.kt | 2 - .../org/openapitools/server/models/Pet.kt | 2 - .../org/openapitools/server/models/Tag.kt | 2 - .../org/openapitools/server/models/User.kt | 2 - .../openapitools/server/models/Category.kt | 2 - .../server/models/ModelApiResponse.kt | 2 - .../org/openapitools/server/models/Order.kt | 2 - .../org/openapitools/server/models/Pet.kt | 2 - .../org/openapitools/server/models/Tag.kt | 2 - .../org/openapitools/server/models/User.kt | 2 - .../openapitools/server/models/Category.kt | 5 +- .../server/models/ModelApiResponse.kt | 5 +- .../org/openapitools/server/models/Order.kt | 5 +- .../org/openapitools/server/models/Pet.kt | 5 +- .../org/openapitools/server/models/Tag.kt | 5 +- .../org/openapitools/server/models/User.kt | 5 +- 32 files changed, 51 insertions(+), 563 deletions(-) diff --git a/docs/generators/kotlin-server.md b/docs/generators/kotlin-server.md index 9e8c7c2291df..d1871b49f88d 100644 --- a/docs/generators/kotlin-server.md +++ b/docs/generators/kotlin-server.md @@ -18,6 +18,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | +|Whether Kotlin serialization should be used|Whether Kotlin serialization should be used| |true| |additionalModelTypeAnnotations|Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)| |null| |apiSuffix|suffix for api classes| |Api| |artifactId|Generated artifact id (name of jar).| |kotlin-server| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 384f8a1ca735..13744a69f92a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -51,6 +51,8 @@ public class KotlinServerCodegen extends AbstractKotlinCodegen implements BeanVa @Getter @Setter private Boolean compressionFeatureEnabled = true; @Getter @Setter + private Boolean kotlinSerializationEnabled = true; + @Getter @Setter private Boolean resourcesFeatureEnabled = true; @Getter @Setter private Boolean metricsFeatureEnabled = true; @@ -136,6 +138,7 @@ public KotlinServerCodegen() { addSwitch(Constants.AUTOMATIC_HEAD_REQUESTS, Constants.AUTOMATIC_HEAD_REQUESTS_DESC, getAutoHeadFeatureEnabled()); addSwitch(Constants.CONDITIONAL_HEADERS, Constants.CONDITIONAL_HEADERS_DESC, getConditionalHeadersFeatureEnabled()); addSwitch(Constants.HSTS, Constants.HSTS_DESC, getHstsFeatureEnabled()); + addSwitch(Constants.KOTLIN_SERIALIZATION, Constants.KOTLIN_SERIALIZATION, getKotlinSerializationEnabled()); addSwitch(Constants.CORS, Constants.CORS_DESC, getCorsFeatureEnabled()); addSwitch(Constants.COMPRESSION, Constants.COMPRESSION_DESC, getCompressionFeatureEnabled()); addSwitch(Constants.RESOURCES, Constants.RESOURCES_DESC, getResourcesFeatureEnabled()); @@ -292,6 +295,14 @@ public void processOpts() { supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.properties")); if (isKtor()) { + setKotlinSerializationEnabled(true); + + if (additionalProperties.containsKey(Constants.KOTLIN_SERIALIZATION)) { + setKotlinSerializationEnabled(convertPropertyToBooleanAndWriteBack(Constants.KOTLIN_SERIALIZATION)); + } else { + additionalProperties.put(Constants.KOTLIN_SERIALIZATION, getKotlinSerializationEnabled()); + } + supportingFiles.add(new SupportingFile("AppMain.kt.mustache", packageFolder, "AppMain.kt")); supportingFiles.add(new SupportingFile("Configuration.kt.mustache", packageFolder, "Configuration.kt")); @@ -358,6 +369,7 @@ public static class Constants { public static final String USE_MUTINY_DESC = "Whether to use Mutiny (should not be used with useCoroutines). This option is currently supported only when using jaxrs-spec library."; public static final String OMIT_GRADLE_WRAPPER = "omitGradleWrapper"; public static final String OMIT_GRADLE_WRAPPER_DESC = "Whether to omit Gradle wrapper for creating a sub project."; + public static final String KOTLIN_SERIALIZATION = "Whether Kotlin serialization should be used"; } @Override diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache index 0f8615de28d9..1b4d1fcd7fe8 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache @@ -1,18 +1,32 @@ -import kotlinx.serialization.Serializable +{{#parcelizeModels}} + import android.os.Parcelable + import kotlinx.parcelize.Parcelize +{{/parcelizeModels}} +{{#serializableModel}} + import java.io.Serializable +{{/serializableModel}} +{{#kotlinSerialization}} + import kotlinx.serialization.Serializable +{{/kotlinSerialization}} /** * {{{description}}} {{#vars}} * @param {{{name}}} {{{description}}} {{/vars}} */ +{{#parcelizeModels}} +@Parcelize +{{/parcelizeModels}} +{{#kotlinSerialization}} @Serializable +{{/kotlinSerialization}} {{#hasVars}}data {{/hasVars}}class {{classname}}( {{#requiredVars}} {{>data_class_req_var}}{{^-last}}, {{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}}, {{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>data_class_opt_var}}{{^-last}}, {{/-last}}{{/optionalVars}} -) +){{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}} {{#vendorExtensions.x-has-data-class-body}} { {{/vendorExtensions.x-has-data-class-body}} diff --git a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES index 0f5e9fcaaa55..1db889c4947b 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES +++ b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES @@ -5,34 +5,12 @@ README.md api/openapi.yaml build.gradle build.sbt -docs/AllOfSimpleModel.md -docs/Animal.md -docs/AnyTypeTest.md -docs/ArrayOfSameRef.md -docs/Cat.md docs/Category.md -docs/CircularReference1.md -docs/CircularReference2.md -docs/CircularReference3.md -docs/CodesEnum.md -docs/DefaultApi.md -docs/Dog.md -docs/FakeApi.md -docs/FakeWebhooksSourcesDeletedPostRequest.md -docs/FakeWebhooksSourcesDeletedPostRequestEvent.md docs/ModelApiResponse.md -docs/OneOfStringOrInt.md docs/Order.md docs/Pet.md docs/PetApi.md -docs/RefRefToPathLevelParameterOneofRefToOneofParameter.md -docs/RefToRefParameterAnyofRefToAnyofParameter.md -docs/SelfReferenceAdditionalProperties.md -docs/SelfReferenceAnyOf.md -docs/SelfReferenceOneOf.md -docs/SimpleModelWithArrayProperty.md docs/StoreApi.md -docs/StringOrInt.md docs/Tag.md docs/User.md docs/UserApi.md @@ -58,8 +36,6 @@ src/main/java/org/openapitools/client/ProgressResponseBody.java src/main/java/org/openapitools/client/ServerConfiguration.java src/main/java/org/openapitools/client/ServerVariable.java src/main/java/org/openapitools/client/StringUtil.java -src/main/java/org/openapitools/client/api/DefaultApi.java -src/main/java/org/openapitools/client/api/FakeApi.java src/main/java/org/openapitools/client/api/PetApi.java src/main/java/org/openapitools/client/api/StoreApi.java src/main/java/org/openapitools/client/api/UserApi.java @@ -72,29 +48,9 @@ src/main/java/org/openapitools/client/auth/OAuthFlow.java src/main/java/org/openapitools/client/auth/OAuthOkHttpClient.java src/main/java/org/openapitools/client/auth/RetryingOAuth.java src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java -src/main/java/org/openapitools/client/model/AllOfSimpleModel.java -src/main/java/org/openapitools/client/model/Animal.java -src/main/java/org/openapitools/client/model/AnyTypeTest.java -src/main/java/org/openapitools/client/model/ArrayOfSameRef.java -src/main/java/org/openapitools/client/model/Cat.java src/main/java/org/openapitools/client/model/Category.java -src/main/java/org/openapitools/client/model/CircularReference1.java -src/main/java/org/openapitools/client/model/CircularReference2.java -src/main/java/org/openapitools/client/model/CircularReference3.java -src/main/java/org/openapitools/client/model/CodesEnum.java -src/main/java/org/openapitools/client/model/Dog.java -src/main/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequest.java -src/main/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequestEvent.java src/main/java/org/openapitools/client/model/ModelApiResponse.java -src/main/java/org/openapitools/client/model/OneOfStringOrInt.java src/main/java/org/openapitools/client/model/Order.java src/main/java/org/openapitools/client/model/Pet.java -src/main/java/org/openapitools/client/model/RefRefToPathLevelParameterOneofRefToOneofParameter.java -src/main/java/org/openapitools/client/model/RefToRefParameterAnyofRefToAnyofParameter.java -src/main/java/org/openapitools/client/model/SelfReferenceAdditionalProperties.java -src/main/java/org/openapitools/client/model/SelfReferenceAnyOf.java -src/main/java/org/openapitools/client/model/SelfReferenceOneOf.java -src/main/java/org/openapitools/client/model/SimpleModelWithArrayProperty.java -src/main/java/org/openapitools/client/model/StringOrInt.java src/main/java/org/openapitools/client/model/Tag.java src/main/java/org/openapitools/client/model/User.java diff --git a/samples/client/petstore/java/okhttp-gson-3.1/README.md b/samples/client/petstore/java/okhttp-gson-3.1/README.md index c61811c10ed3..a5b64cc47df3 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/README.md +++ b/samples/client/petstore/java/okhttp-gson-3.1/README.md @@ -83,20 +83,26 @@ Please follow the [installation](#installation) instruction and execute the foll import org.openapitools.client.ApiClient; import org.openapitools.client.ApiException; import org.openapitools.client.Configuration; +import org.openapitools.client.auth.*; import org.openapitools.client.model.*; -import org.openapitools.client.api.FakeApi; +import org.openapitools.client.api.PetApi; public class Example { public static void main(String[] args) { ApiClient defaultClient = Configuration.getDefaultApiClient(); defaultClient.setBasePath("http://petstore.swagger.io/v2"); + + // Configure OAuth2 access token for authorization: petstore_auth + OAuth petstore_auth = (OAuth) defaultClient.getAuthentication("petstore_auth"); + petstore_auth.setAccessToken("YOUR ACCESS TOKEN"); - FakeApi apiInstance = new FakeApi(defaultClient); + PetApi apiInstance = new PetApi(defaultClient); + Pet pet = new Pet(); // Pet | Pet object that needs to be added to the store try { - Object result = apiInstance.fakeInlineSchemaAnyofPath1Get(); + Pet result = apiInstance.addPet(pet); System.out.println(result); } catch (ApiException e) { - System.err.println("Exception when calling FakeApi#fakeInlineSchemaAnyofPath1Get"); + System.err.println("Exception when calling PetApi#addPet"); System.err.println("Status code: " + e.getCode()); System.err.println("Reason: " + e.getResponseBody()); System.err.println("Response headers: " + e.getResponseHeaders()); @@ -113,18 +119,6 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*FakeApi* | [**fakeInlineSchemaAnyofPath1Get**](docs/FakeApi.md#fakeInlineSchemaAnyofPath1Get) | **GET** /fake/inline/schema/anyof/path1 | -*FakeApi* | [**fakeInlineSchemaAnyofPath2Get**](docs/FakeApi.md#fakeInlineSchemaAnyofPath2Get) | **GET** /fake/inline/schema/anyof/path2 | -*FakeApi* | [**fakeInlineSchemaAnyofPath3Get**](docs/FakeApi.md#fakeInlineSchemaAnyofPath3Get) | **GET** /fake/inline/schema/anyof/path3 | -*FakeApi* | [**op1**](docs/FakeApi.md#op1) | **POST** /fake/api/changeowner | op1 -*FakeApi* | [**op2**](docs/FakeApi.md#op2) | **POST** /fake/api/changename | op2 -*FakeApi* | [**op3**](docs/FakeApi.md#op3) | **POST** /fake/api/query/enum | op3 -*FakeApi* | [**refToRefParameter**](docs/FakeApi.md#refToRefParameter) | **GET** /ref/ref_to_parameter | -*FakeApi* | [**refToRefParameterAnyof**](docs/FakeApi.md#refToRefParameterAnyof) | **GET** /ref/ref_to_operation_level_parameter_oneof | -*FakeApi* | [**refToRefParameterOneof**](docs/FakeApi.md#refToRefParameterOneof) | **GET** /ref/ref_to_path_level_parameter_oneof | -*FakeApi* | [**responseNoRef**](docs/FakeApi.md#responseNoRef) | **GET** /no_ref | -*FakeApi* | [**responseRefToNoRef**](docs/FakeApi.md#responseRefToNoRef) | **GET** /ref/no_ref | -*FakeApi* | [**responseRefToRef**](docs/FakeApi.md#responseRefToRef) | **GET** /ref/ref | *PetApi* | [**addPet**](docs/PetApi.md#addPet) | **POST** /pet | Add a new pet to the store *PetApi* | [**deletePet**](docs/PetApi.md#deletePet) | **DELETE** /pet/{petId} | Deletes a pet *PetApi* | [**findPetsByStatus**](docs/PetApi.md#findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status @@ -149,30 +143,10 @@ Class | Method | HTTP request | Description ## Documentation for Models - - [AllOfSimpleModel](docs/AllOfSimpleModel.md) - - [Animal](docs/Animal.md) - - [AnyTypeTest](docs/AnyTypeTest.md) - - [ArrayOfSameRef](docs/ArrayOfSameRef.md) - - [Cat](docs/Cat.md) - [Category](docs/Category.md) - - [CircularReference1](docs/CircularReference1.md) - - [CircularReference2](docs/CircularReference2.md) - - [CircularReference3](docs/CircularReference3.md) - - [CodesEnum](docs/CodesEnum.md) - - [Dog](docs/Dog.md) - - [FakeWebhooksSourcesDeletedPostRequest](docs/FakeWebhooksSourcesDeletedPostRequest.md) - - [FakeWebhooksSourcesDeletedPostRequestEvent](docs/FakeWebhooksSourcesDeletedPostRequestEvent.md) - [ModelApiResponse](docs/ModelApiResponse.md) - - [OneOfStringOrInt](docs/OneOfStringOrInt.md) - [Order](docs/Order.md) - [Pet](docs/Pet.md) - - [RefRefToPathLevelParameterOneofRefToOneofParameter](docs/RefRefToPathLevelParameterOneofRefToOneofParameter.md) - - [RefToRefParameterAnyofRefToAnyofParameter](docs/RefToRefParameterAnyofRefToAnyofParameter.md) - - [SelfReferenceAdditionalProperties](docs/SelfReferenceAdditionalProperties.md) - - [SelfReferenceAnyOf](docs/SelfReferenceAnyOf.md) - - [SelfReferenceOneOf](docs/SelfReferenceOneOf.md) - - [SimpleModelWithArrayProperty](docs/SimpleModelWithArrayProperty.md) - - [StringOrInt](docs/StringOrInt.md) - [Tag](docs/Tag.md) - [User](docs/User.md) diff --git a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml index 600ba1a18fb9..5167f861249d 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml +++ b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml @@ -639,219 +639,7 @@ paths: x-content-type: application/json x-accepts: - application/json - /no_ref: - get: - operationId: response_no_ref - responses: - "200": - content: - text/plain: - schema: - type: string - description: required to pass validation - tags: - - fake - x-accepts: - - text/plain - /ref/no_ref: - get: - operationId: response_ref_to_no_ref - responses: - "200": - $ref: '#/components/responses/no_ref' - tags: - - fake - x-accepts: - - text/plain - /ref/ref: - get: - operationId: response_ref_to_ref - responses: - "200": - $ref: '#/components/responses/ref' - tags: - - fake - x-accepts: - - text/plain - /ref/ref_to_parameter: - get: - operationId: ref_to_ref_parameter - parameters: - - $ref: '#/components/parameters/ref_to_uuid' - responses: - "200": - $ref: '#/components/responses/ref' - tags: - - fake - x-accepts: - - text/plain - parameters: - - $ref: '#/components/parameters/ref_to_uuid' - /ref/ref_to_path_level_parameter_oneof: - get: - description: to test $ref to path level parameters - operationId: ref_to_ref_parameter_oneof - parameters: - - $ref: '#/components/parameters/ref_to_oneof' - responses: - "200": - description: Successful Response - tags: - - fake - x-accepts: - - application/json - parameters: - - $ref: '#/components/parameters/ref_to_oneof' - /ref/ref_to_operation_level_parameter_oneof: - get: - description: to test $ref to operation level parameters - operationId: ref_to_ref_parameter_anyof - parameters: - - $ref: '#/components/parameters/ref_to_anyof' - responses: - "200": - description: Successful Response - tags: - - fake - x-accepts: - - application/json - /fake/api/changeowner: - post: - operationId: op1 - parameters: [] - responses: - "201": - content: - application/json: - schema: {} - description: Successful Response - "422": - content: - application/json: - schema: - $ref: '#/components/schemas/HTTPValidationError' - description: Validation Error - summary: op1 - tags: - - fake - x-accepts: - - application/json - /fake/api/changename: - post: - operationId: op2 - parameters: [] - responses: - "201": - content: - application/json: - schema: {} - description: Successful Response - "422": - content: - application/json: - schema: - $ref: '#/components/schemas/HTTPValidationError' - description: Validation Error - summary: op2 - tags: - - fake - x-accepts: - - application/json - /fake/api/query/enum: - post: - operationId: op3 - parameters: - - description: query enum test - explode: true - in: query - name: query_enum - required: true - schema: - items: - $ref: '#/components/schemas/CodesEnum' - type: array - style: form - responses: - "200": - description: Successful Response - summary: op3 - tags: - - fake - x-accepts: - - application/json - /fake/inline/schema/anyof/path1: - get: - responses: - "200": - content: - application/json: - schema: - $ref: '#/components/schemas/myObject' - description: "" - tags: - - fake - x-accepts: - - application/json - /fake/inline/schema/anyof/path2: - get: - responses: - "200": - content: - application/json: - schema: - $ref: '#/components/schemas/myObject' - description: "" - tags: - - fake - x-accepts: - - application/json - /fake/inline/schema/anyof/path3: - get: - responses: - "200": - content: - application/json: - schema: - items: - $ref: '#/components/schemas/myObject' - nullable: true - type: array - description: "" - tags: - - fake - x-accepts: - - application/json components: - parameters: - ref_to_uuid: - description: to test ref to parameter (uuid) - explode: false - in: header - name: ref_to_uuid - required: true - schema: - example: 61864654-6e6b-4152-a62f-795fdd606bc2 - format: uuid - type: string - style: simple - ref_to_oneof: - description: to test ref to parameter (oneof) - explode: false - in: header - name: ref_to_oneof - required: true - schema: - $ref: '#/components/schemas/_ref_ref_to_path_level_parameter_oneof_ref_to_oneof_parameter' - style: simple - ref_to_anyof: - description: to test ref to parameter (anyof) - explode: false - in: header - name: ref_to_anyof - required: true - schema: - $ref: '#/components/schemas/ref_to_ref_parameter_anyof_ref_to_anyof_parameter' - style: simple requestBodies: UserArray: content: @@ -872,19 +660,6 @@ components: $ref: '#/components/schemas/Pet' description: Pet object that needs to be added to the store required: true - responses: - no_ref: - content: - text/plain: - schema: - type: string - description: required to pass validation - ref: - content: - text/plain: - schema: - $ref: '#/components/schemas/simple_text' - description: required to pass validation schemas: Order: description: An order for a pets from the pet store @@ -1053,129 +828,6 @@ components: message: type: string title: An uploaded response - StringOrInt: - anyOf: - - type: string - - format: int32 - type: integer - description: string or int - OneOfStringOrInt: - description: string or int (onefOf) - oneOf: - - type: string - - type: integer - Dog: - allOf: - - $ref: '#/components/schemas/Animal' - - properties: - breed: - type: string - Cat: - allOf: - - $ref: '#/components/schemas/Animal' - - properties: - declawed: - type: boolean - Animal: - discriminator: - propertyName: className - properties: - className: - type: string - color: - default: red - type: string - required: - - className - simple_text: - type: string - any_type_test: - properties: - any_type_property: {} - array_prop: - description: test array in 3.1 spec - items: - type: string - type: array - ref_array_prefix_items: - description: | - An item that was added to the queue. - items: {} - maxItems: 5 - minItems: 3 - type: array - HTTPValidationError: - properties: {} - title: HTTPValidationError - type: object - ArrayPrefixItems: - description: | - An item that was added to the queue. - items: {} - maxItems: 5 - minItems: 3 - type: array - circular_reference_1: - properties: - prop1: - $ref: '#/components/schemas/circular_reference_2' - circular_reference_2: - properties: - prop1: - $ref: '#/components/schemas/circular_reference_3' - circular_reference_3: - properties: - prop1: - $ref: '#/components/schemas/circular_reference_1' - array_of_same_ref: - properties: - arrayFooOne: - items: - $ref: '#/components/schemas/Tag' - type: array - arrayFooTwo: - items: - $ref: '#/components/schemas/Tag' - type: array - arrayFooThree: - items: - $ref: '#/components/schemas/Tag' - type: array - CodesEnum: - enum: - - Code 1 - - Code 2 - - Code 3 - type: string - SimpleModelWithArrayProperty: - properties: - arrayOfStrings: - items: - type: string - type: array - required: - - arrayOfStrings - AllOfSimpleModel: - allOf: - - $ref: '#/components/schemas/SimpleModelWithArrayProperty' - myObject: - type: object - SelfReference: - items: {} - type: array - SelfReferenceOneOf: - oneOf: - - type: string - - type: boolean - SelfReferenceAnyOf: - anyOf: - - type: string - - type: boolean - SelfReferenceAdditionalProperties: - additionalProperties: {} - properties: - dummy: - type: string updatePetWithForm_request: properties: name: @@ -1193,36 +845,6 @@ components: description: file to upload format: binary type: string - _ref_ref_to_path_level_parameter_oneof_ref_to_oneof_parameter: - oneOf: - - type: string - - type: integer - ref_to_ref_parameter_anyof_ref_to_anyof_parameter: - oneOf: - - type: string - - items: - type: string - type: array - _fake_webhooks_sources_deleted_post_request_event: - properties: - event_id: - type: string - required: - - event_id - _fake_webhooks_sources_deleted_post_request: - description: inline schema in webhooks - properties: - event_timestamp: - format: date-time - type: string - event_type: - type: string - event: - $ref: '#/components/schemas/_fake_webhooks_sources_deleted_post_request_event' - required: - - event - - event_timestamp - - event_type securitySchemes: petstore_auth: flows: diff --git a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java index 70968d44d7c1..f993e935c7aa 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java @@ -58,35 +58,6 @@ public class JSON { @SuppressWarnings("unchecked") public static GsonBuilder createGson() { GsonFireBuilder fireBuilder = new GsonFireBuilder() - .registerTypeSelector(org.openapitools.client.model.Animal.class, new TypeSelector() { - @Override - public Class getClassForElement(JsonElement readElement) { - Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat", org.openapitools.client.model.Cat.class); - classByDiscriminatorValue.put("Dog", org.openapitools.client.model.Dog.class); - classByDiscriminatorValue.put("Animal", org.openapitools.client.model.Animal.class); - return getClassByDiscriminator(classByDiscriminatorValue, - getDiscriminatorValue(readElement, "className")); - } - }) - .registerTypeSelector(org.openapitools.client.model.Cat.class, new TypeSelector() { - @Override - public Class getClassForElement(JsonElement readElement) { - Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Cat", org.openapitools.client.model.Cat.class); - return getClassByDiscriminator(classByDiscriminatorValue, - getDiscriminatorValue(readElement, "className")); - } - }) - .registerTypeSelector(org.openapitools.client.model.Dog.class, new TypeSelector() { - @Override - public Class getClassForElement(JsonElement readElement) { - Map classByDiscriminatorValue = new HashMap(); - classByDiscriminatorValue.put("Dog", org.openapitools.client.model.Dog.class); - return getClassByDiscriminator(classByDiscriminatorValue, - getDiscriminatorValue(readElement, "className")); - } - }) ; GsonBuilder builder = fireBuilder.createGsonBuilder(); return builder; @@ -122,28 +93,10 @@ private static Class getClassByDiscriminator(Map classByDiscriminatorValue, Stri gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter); gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter); gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AllOfSimpleModel.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyTypeTest.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ArrayOfSameRef.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Category.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference1.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference2.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference3.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Dog.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.FakeWebhooksSourcesDeletedPostRequest.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.FakeWebhooksSourcesDeletedPostRequestEvent.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ModelApiResponse.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.OneOfStringOrInt.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Order.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Pet.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.RefRefToPathLevelParameterOneofRefToOneofParameter.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.RefToRefParameterAnyofRefToAnyofParameter.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SelfReferenceAdditionalProperties.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SelfReferenceAnyOf.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SelfReferenceOneOf.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SimpleModelWithArrayProperty.CustomTypeAdapterFactory()); - gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.StringOrInt.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Tag.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.User.CustomTypeAdapterFactory()); gson = gsonBuilder.create(); diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt index 82813cdbff3e..b22939b05947 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,13 +12,11 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ -@Serializable data class Category( var id: kotlin.Long? = null, var name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index dcc1ed13510b..cd59353be8f0 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,14 +12,12 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ -@Serializable data class ModelApiResponse( var code: kotlin.Int? = null, var type: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt index d5a9b56748f7..b06af02aec05 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -22,7 +21,6 @@ import kotlinx.serialization.Serializable * @param status Order Status * @param complete */ -@Serializable data class Order( var id: kotlin.Long? = null, var petId: kotlin.Long? = null, diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt index e9095e0a7c60..2fd28652dcd8 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,7 +14,6 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag -import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -24,7 +23,6 @@ import kotlinx.serialization.Serializable * @param tags * @param status pet status in the store */ -@Serializable data class Pet( var name: kotlin.String, var photoUrls: kotlin.collections.MutableList, diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt index 26a16d0acc37..4c697bab29ae 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,13 +12,11 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ -@Serializable data class Tag( var id: kotlin.Long? = null, var name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt index 57f4e607386a..9e2799f69ca9 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -24,7 +23,6 @@ import kotlinx.serialization.Serializable * @param phone * @param userStatus User Status */ -@Serializable data class User( var id: kotlin.Long? = null, var username: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt index 5266d4aaa2f1..072781fb8b9c 100644 --- a/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server-required-and-nullable-properties/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * * @param notNullableRequired @@ -20,7 +19,6 @@ import kotlinx.serialization.Serializable * @param nullableNotRequired * @param notNullableNotRequired */ -@Serializable data class Pet( val notNullableRequired: kotlin.String, val nullableRequired: kotlin.String?, diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt index 0c3ccfcfe850..852f443a304c 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,13 +12,11 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ -@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 5ecc51991934..94b9ddf7b92e 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,14 +12,12 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ -@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt index d015eb6b780a..48c1ef32bd34 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -22,7 +21,6 @@ import kotlinx.serialization.Serializable * @param status Order Status * @param complete */ -@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt index 929d729b09bb..0a0c9a010354 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,7 +14,6 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag -import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -24,7 +23,6 @@ import kotlinx.serialization.Serializable * @param tags * @param status pet status in the store */ -@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt index 76749aca3f4d..9c0bd1e9aada 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,13 +12,11 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ -@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt index 26757f921f43..b26d40023f95 100644 --- a/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/javalin-6/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -24,7 +23,6 @@ import kotlinx.serialization.Serializable * @param phone * @param userStatus User Status */ -@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt index 0c3ccfcfe850..852f443a304c 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,13 +12,11 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ -@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 5ecc51991934..94b9ddf7b92e 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,14 +12,12 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ -@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt index d015eb6b780a..48c1ef32bd34 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -22,7 +21,6 @@ import kotlinx.serialization.Serializable * @param status Order Status * @param complete */ -@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt index 929d729b09bb..0a0c9a010354 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,7 +14,6 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag -import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -24,7 +23,6 @@ import kotlinx.serialization.Serializable * @param tags * @param status pet status in the store */ -@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt index 76749aca3f4d..9c0bd1e9aada 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,13 +12,11 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ -@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt index 26757f921f43..b26d40023f95 100644 --- a/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/javalin/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -24,7 +23,6 @@ import kotlinx.serialization.Serializable * @param phone * @param userStatus User Status */ -@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt index 7647c2d227e0..60715998c2a0 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,17 +12,16 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable + import java.io.Serializable /** * A category for a pet * @param id * @param name */ -@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null -) +): Serializable { } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index e16d42e86a4e..37fe31a0e035 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,19 +12,18 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable + import java.io.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ -@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, val message: kotlin.String? = null -) +): Serializable { } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt index b1a711510fc6..e7b861dee4ec 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,7 +12,7 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable + import java.io.Serializable /** * An order for a pets from the pet store * @param id @@ -22,7 +22,6 @@ import kotlinx.serialization.Serializable * @param status Order Status * @param complete */ -@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, @@ -31,7 +30,7 @@ data class Order( /* Order Status */ val status: Order.Status? = null, val complete: kotlin.Boolean? = false -) +): Serializable { /** * Order Status diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt index 8fe934cc3ff3..2d025bfba231 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,7 +14,7 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag -import kotlinx.serialization.Serializable + import java.io.Serializable /** * A pet for sale in the pet store * @param name @@ -24,7 +24,6 @@ import kotlinx.serialization.Serializable * @param tags * @param status pet status in the store */ -@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, @@ -33,7 +32,7 @@ data class Pet( val tags: kotlin.collections.List? = null, /* pet status in the store */ val status: Pet.Status? = null -) +): Serializable { /** * pet status in the store diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt index fae4d9d0ba3c..e9d0d7f076bb 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,17 +12,16 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable + import java.io.Serializable /** * A tag for a pet * @param id * @param name */ -@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null -) +): Serializable { } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt index af04fd61c1cf..79cb2b3f6ff6 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,7 +12,7 @@ package org.openapitools.server.models -import kotlinx.serialization.Serializable + import java.io.Serializable /** * A User who is purchasing from the pet store * @param id @@ -24,7 +24,6 @@ import kotlinx.serialization.Serializable * @param phone * @param userStatus User Status */ -@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, @@ -35,7 +34,7 @@ data class User( val phone: kotlin.String? = null, /* User Status */ val userStatus: kotlin.Int? = null -) +): Serializable { } From 2608d10b5379d1caa5e45129a2e5a02907485d4c Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Fri, 6 Dec 2024 11:10:34 +0200 Subject: [PATCH 4/9] [Kotlin Server] Fix Ktor and modelMutable samples --- .../libraries/ktor/build.gradle.kts.mustache | 3 +- .../okhttp-gson-3.1/.openapi-generator/FILES | 44 ++ .../petstore/java/okhttp-gson-3.1/README.md | 46 ++- .../java/okhttp-gson-3.1/api/openapi.yaml | 378 ++++++++++++++++++ .../java/org/openapitools/client/JSON.java | 47 +++ .../kotlin-server-modelMutable/build.gradle | 74 ---- .../build.gradle.kts | 3 +- .../kotlin-server/ktor/build.gradle.kts | 3 +- 8 files changed, 511 insertions(+), 87 deletions(-) delete mode 100644 samples/server/petstore/kotlin-server-modelMutable/build.gradle diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache index 268c54c5093a..1fa61c071eaf 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/build.gradle.kts.mustache @@ -7,7 +7,7 @@ version = "{{artifactVersion}}" plugins { kotlin("jvm") version "2.0.20" - id("io.ktor.plugin") version "3.0.2" + application kotlin("plugin.serialization") version "2.0.20" } @@ -23,6 +23,7 @@ repositories { } dependencies { + implementation(platform("io.ktor:ktor-bom:3.0.2")) implementation("ch.qos.logback:logback-classic:$logback_version") {{#hasAuthMethods}} implementation("com.typesafe:config:1.4.1") diff --git a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES index 1db889c4947b..0f5e9fcaaa55 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES +++ b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES @@ -5,12 +5,34 @@ README.md api/openapi.yaml build.gradle build.sbt +docs/AllOfSimpleModel.md +docs/Animal.md +docs/AnyTypeTest.md +docs/ArrayOfSameRef.md +docs/Cat.md docs/Category.md +docs/CircularReference1.md +docs/CircularReference2.md +docs/CircularReference3.md +docs/CodesEnum.md +docs/DefaultApi.md +docs/Dog.md +docs/FakeApi.md +docs/FakeWebhooksSourcesDeletedPostRequest.md +docs/FakeWebhooksSourcesDeletedPostRequestEvent.md docs/ModelApiResponse.md +docs/OneOfStringOrInt.md docs/Order.md docs/Pet.md docs/PetApi.md +docs/RefRefToPathLevelParameterOneofRefToOneofParameter.md +docs/RefToRefParameterAnyofRefToAnyofParameter.md +docs/SelfReferenceAdditionalProperties.md +docs/SelfReferenceAnyOf.md +docs/SelfReferenceOneOf.md +docs/SimpleModelWithArrayProperty.md docs/StoreApi.md +docs/StringOrInt.md docs/Tag.md docs/User.md docs/UserApi.md @@ -36,6 +58,8 @@ src/main/java/org/openapitools/client/ProgressResponseBody.java src/main/java/org/openapitools/client/ServerConfiguration.java src/main/java/org/openapitools/client/ServerVariable.java src/main/java/org/openapitools/client/StringUtil.java +src/main/java/org/openapitools/client/api/DefaultApi.java +src/main/java/org/openapitools/client/api/FakeApi.java src/main/java/org/openapitools/client/api/PetApi.java src/main/java/org/openapitools/client/api/StoreApi.java src/main/java/org/openapitools/client/api/UserApi.java @@ -48,9 +72,29 @@ src/main/java/org/openapitools/client/auth/OAuthFlow.java src/main/java/org/openapitools/client/auth/OAuthOkHttpClient.java src/main/java/org/openapitools/client/auth/RetryingOAuth.java src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java +src/main/java/org/openapitools/client/model/AllOfSimpleModel.java +src/main/java/org/openapitools/client/model/Animal.java +src/main/java/org/openapitools/client/model/AnyTypeTest.java +src/main/java/org/openapitools/client/model/ArrayOfSameRef.java +src/main/java/org/openapitools/client/model/Cat.java src/main/java/org/openapitools/client/model/Category.java +src/main/java/org/openapitools/client/model/CircularReference1.java +src/main/java/org/openapitools/client/model/CircularReference2.java +src/main/java/org/openapitools/client/model/CircularReference3.java +src/main/java/org/openapitools/client/model/CodesEnum.java +src/main/java/org/openapitools/client/model/Dog.java +src/main/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequest.java +src/main/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequestEvent.java src/main/java/org/openapitools/client/model/ModelApiResponse.java +src/main/java/org/openapitools/client/model/OneOfStringOrInt.java src/main/java/org/openapitools/client/model/Order.java src/main/java/org/openapitools/client/model/Pet.java +src/main/java/org/openapitools/client/model/RefRefToPathLevelParameterOneofRefToOneofParameter.java +src/main/java/org/openapitools/client/model/RefToRefParameterAnyofRefToAnyofParameter.java +src/main/java/org/openapitools/client/model/SelfReferenceAdditionalProperties.java +src/main/java/org/openapitools/client/model/SelfReferenceAnyOf.java +src/main/java/org/openapitools/client/model/SelfReferenceOneOf.java +src/main/java/org/openapitools/client/model/SimpleModelWithArrayProperty.java +src/main/java/org/openapitools/client/model/StringOrInt.java src/main/java/org/openapitools/client/model/Tag.java src/main/java/org/openapitools/client/model/User.java diff --git a/samples/client/petstore/java/okhttp-gson-3.1/README.md b/samples/client/petstore/java/okhttp-gson-3.1/README.md index a5b64cc47df3..c61811c10ed3 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/README.md +++ b/samples/client/petstore/java/okhttp-gson-3.1/README.md @@ -83,26 +83,20 @@ Please follow the [installation](#installation) instruction and execute the foll import org.openapitools.client.ApiClient; import org.openapitools.client.ApiException; import org.openapitools.client.Configuration; -import org.openapitools.client.auth.*; import org.openapitools.client.model.*; -import org.openapitools.client.api.PetApi; +import org.openapitools.client.api.FakeApi; public class Example { public static void main(String[] args) { ApiClient defaultClient = Configuration.getDefaultApiClient(); defaultClient.setBasePath("http://petstore.swagger.io/v2"); - - // Configure OAuth2 access token for authorization: petstore_auth - OAuth petstore_auth = (OAuth) defaultClient.getAuthentication("petstore_auth"); - petstore_auth.setAccessToken("YOUR ACCESS TOKEN"); - PetApi apiInstance = new PetApi(defaultClient); - Pet pet = new Pet(); // Pet | Pet object that needs to be added to the store + FakeApi apiInstance = new FakeApi(defaultClient); try { - Pet result = apiInstance.addPet(pet); + Object result = apiInstance.fakeInlineSchemaAnyofPath1Get(); System.out.println(result); } catch (ApiException e) { - System.err.println("Exception when calling PetApi#addPet"); + System.err.println("Exception when calling FakeApi#fakeInlineSchemaAnyofPath1Get"); System.err.println("Status code: " + e.getCode()); System.err.println("Reason: " + e.getResponseBody()); System.err.println("Response headers: " + e.getResponseHeaders()); @@ -119,6 +113,18 @@ All URIs are relative to *http://petstore.swagger.io/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- +*FakeApi* | [**fakeInlineSchemaAnyofPath1Get**](docs/FakeApi.md#fakeInlineSchemaAnyofPath1Get) | **GET** /fake/inline/schema/anyof/path1 | +*FakeApi* | [**fakeInlineSchemaAnyofPath2Get**](docs/FakeApi.md#fakeInlineSchemaAnyofPath2Get) | **GET** /fake/inline/schema/anyof/path2 | +*FakeApi* | [**fakeInlineSchemaAnyofPath3Get**](docs/FakeApi.md#fakeInlineSchemaAnyofPath3Get) | **GET** /fake/inline/schema/anyof/path3 | +*FakeApi* | [**op1**](docs/FakeApi.md#op1) | **POST** /fake/api/changeowner | op1 +*FakeApi* | [**op2**](docs/FakeApi.md#op2) | **POST** /fake/api/changename | op2 +*FakeApi* | [**op3**](docs/FakeApi.md#op3) | **POST** /fake/api/query/enum | op3 +*FakeApi* | [**refToRefParameter**](docs/FakeApi.md#refToRefParameter) | **GET** /ref/ref_to_parameter | +*FakeApi* | [**refToRefParameterAnyof**](docs/FakeApi.md#refToRefParameterAnyof) | **GET** /ref/ref_to_operation_level_parameter_oneof | +*FakeApi* | [**refToRefParameterOneof**](docs/FakeApi.md#refToRefParameterOneof) | **GET** /ref/ref_to_path_level_parameter_oneof | +*FakeApi* | [**responseNoRef**](docs/FakeApi.md#responseNoRef) | **GET** /no_ref | +*FakeApi* | [**responseRefToNoRef**](docs/FakeApi.md#responseRefToNoRef) | **GET** /ref/no_ref | +*FakeApi* | [**responseRefToRef**](docs/FakeApi.md#responseRefToRef) | **GET** /ref/ref | *PetApi* | [**addPet**](docs/PetApi.md#addPet) | **POST** /pet | Add a new pet to the store *PetApi* | [**deletePet**](docs/PetApi.md#deletePet) | **DELETE** /pet/{petId} | Deletes a pet *PetApi* | [**findPetsByStatus**](docs/PetApi.md#findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status @@ -143,10 +149,30 @@ Class | Method | HTTP request | Description ## Documentation for Models + - [AllOfSimpleModel](docs/AllOfSimpleModel.md) + - [Animal](docs/Animal.md) + - [AnyTypeTest](docs/AnyTypeTest.md) + - [ArrayOfSameRef](docs/ArrayOfSameRef.md) + - [Cat](docs/Cat.md) - [Category](docs/Category.md) + - [CircularReference1](docs/CircularReference1.md) + - [CircularReference2](docs/CircularReference2.md) + - [CircularReference3](docs/CircularReference3.md) + - [CodesEnum](docs/CodesEnum.md) + - [Dog](docs/Dog.md) + - [FakeWebhooksSourcesDeletedPostRequest](docs/FakeWebhooksSourcesDeletedPostRequest.md) + - [FakeWebhooksSourcesDeletedPostRequestEvent](docs/FakeWebhooksSourcesDeletedPostRequestEvent.md) - [ModelApiResponse](docs/ModelApiResponse.md) + - [OneOfStringOrInt](docs/OneOfStringOrInt.md) - [Order](docs/Order.md) - [Pet](docs/Pet.md) + - [RefRefToPathLevelParameterOneofRefToOneofParameter](docs/RefRefToPathLevelParameterOneofRefToOneofParameter.md) + - [RefToRefParameterAnyofRefToAnyofParameter](docs/RefToRefParameterAnyofRefToAnyofParameter.md) + - [SelfReferenceAdditionalProperties](docs/SelfReferenceAdditionalProperties.md) + - [SelfReferenceAnyOf](docs/SelfReferenceAnyOf.md) + - [SelfReferenceOneOf](docs/SelfReferenceOneOf.md) + - [SimpleModelWithArrayProperty](docs/SimpleModelWithArrayProperty.md) + - [StringOrInt](docs/StringOrInt.md) - [Tag](docs/Tag.md) - [User](docs/User.md) diff --git a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml index 5167f861249d..600ba1a18fb9 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml +++ b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml @@ -639,7 +639,219 @@ paths: x-content-type: application/json x-accepts: - application/json + /no_ref: + get: + operationId: response_no_ref + responses: + "200": + content: + text/plain: + schema: + type: string + description: required to pass validation + tags: + - fake + x-accepts: + - text/plain + /ref/no_ref: + get: + operationId: response_ref_to_no_ref + responses: + "200": + $ref: '#/components/responses/no_ref' + tags: + - fake + x-accepts: + - text/plain + /ref/ref: + get: + operationId: response_ref_to_ref + responses: + "200": + $ref: '#/components/responses/ref' + tags: + - fake + x-accepts: + - text/plain + /ref/ref_to_parameter: + get: + operationId: ref_to_ref_parameter + parameters: + - $ref: '#/components/parameters/ref_to_uuid' + responses: + "200": + $ref: '#/components/responses/ref' + tags: + - fake + x-accepts: + - text/plain + parameters: + - $ref: '#/components/parameters/ref_to_uuid' + /ref/ref_to_path_level_parameter_oneof: + get: + description: to test $ref to path level parameters + operationId: ref_to_ref_parameter_oneof + parameters: + - $ref: '#/components/parameters/ref_to_oneof' + responses: + "200": + description: Successful Response + tags: + - fake + x-accepts: + - application/json + parameters: + - $ref: '#/components/parameters/ref_to_oneof' + /ref/ref_to_operation_level_parameter_oneof: + get: + description: to test $ref to operation level parameters + operationId: ref_to_ref_parameter_anyof + parameters: + - $ref: '#/components/parameters/ref_to_anyof' + responses: + "200": + description: Successful Response + tags: + - fake + x-accepts: + - application/json + /fake/api/changeowner: + post: + operationId: op1 + parameters: [] + responses: + "201": + content: + application/json: + schema: {} + description: Successful Response + "422": + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + description: Validation Error + summary: op1 + tags: + - fake + x-accepts: + - application/json + /fake/api/changename: + post: + operationId: op2 + parameters: [] + responses: + "201": + content: + application/json: + schema: {} + description: Successful Response + "422": + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + description: Validation Error + summary: op2 + tags: + - fake + x-accepts: + - application/json + /fake/api/query/enum: + post: + operationId: op3 + parameters: + - description: query enum test + explode: true + in: query + name: query_enum + required: true + schema: + items: + $ref: '#/components/schemas/CodesEnum' + type: array + style: form + responses: + "200": + description: Successful Response + summary: op3 + tags: + - fake + x-accepts: + - application/json + /fake/inline/schema/anyof/path1: + get: + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/myObject' + description: "" + tags: + - fake + x-accepts: + - application/json + /fake/inline/schema/anyof/path2: + get: + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/myObject' + description: "" + tags: + - fake + x-accepts: + - application/json + /fake/inline/schema/anyof/path3: + get: + responses: + "200": + content: + application/json: + schema: + items: + $ref: '#/components/schemas/myObject' + nullable: true + type: array + description: "" + tags: + - fake + x-accepts: + - application/json components: + parameters: + ref_to_uuid: + description: to test ref to parameter (uuid) + explode: false + in: header + name: ref_to_uuid + required: true + schema: + example: 61864654-6e6b-4152-a62f-795fdd606bc2 + format: uuid + type: string + style: simple + ref_to_oneof: + description: to test ref to parameter (oneof) + explode: false + in: header + name: ref_to_oneof + required: true + schema: + $ref: '#/components/schemas/_ref_ref_to_path_level_parameter_oneof_ref_to_oneof_parameter' + style: simple + ref_to_anyof: + description: to test ref to parameter (anyof) + explode: false + in: header + name: ref_to_anyof + required: true + schema: + $ref: '#/components/schemas/ref_to_ref_parameter_anyof_ref_to_anyof_parameter' + style: simple requestBodies: UserArray: content: @@ -660,6 +872,19 @@ components: $ref: '#/components/schemas/Pet' description: Pet object that needs to be added to the store required: true + responses: + no_ref: + content: + text/plain: + schema: + type: string + description: required to pass validation + ref: + content: + text/plain: + schema: + $ref: '#/components/schemas/simple_text' + description: required to pass validation schemas: Order: description: An order for a pets from the pet store @@ -828,6 +1053,129 @@ components: message: type: string title: An uploaded response + StringOrInt: + anyOf: + - type: string + - format: int32 + type: integer + description: string or int + OneOfStringOrInt: + description: string or int (onefOf) + oneOf: + - type: string + - type: integer + Dog: + allOf: + - $ref: '#/components/schemas/Animal' + - properties: + breed: + type: string + Cat: + allOf: + - $ref: '#/components/schemas/Animal' + - properties: + declawed: + type: boolean + Animal: + discriminator: + propertyName: className + properties: + className: + type: string + color: + default: red + type: string + required: + - className + simple_text: + type: string + any_type_test: + properties: + any_type_property: {} + array_prop: + description: test array in 3.1 spec + items: + type: string + type: array + ref_array_prefix_items: + description: | + An item that was added to the queue. + items: {} + maxItems: 5 + minItems: 3 + type: array + HTTPValidationError: + properties: {} + title: HTTPValidationError + type: object + ArrayPrefixItems: + description: | + An item that was added to the queue. + items: {} + maxItems: 5 + minItems: 3 + type: array + circular_reference_1: + properties: + prop1: + $ref: '#/components/schemas/circular_reference_2' + circular_reference_2: + properties: + prop1: + $ref: '#/components/schemas/circular_reference_3' + circular_reference_3: + properties: + prop1: + $ref: '#/components/schemas/circular_reference_1' + array_of_same_ref: + properties: + arrayFooOne: + items: + $ref: '#/components/schemas/Tag' + type: array + arrayFooTwo: + items: + $ref: '#/components/schemas/Tag' + type: array + arrayFooThree: + items: + $ref: '#/components/schemas/Tag' + type: array + CodesEnum: + enum: + - Code 1 + - Code 2 + - Code 3 + type: string + SimpleModelWithArrayProperty: + properties: + arrayOfStrings: + items: + type: string + type: array + required: + - arrayOfStrings + AllOfSimpleModel: + allOf: + - $ref: '#/components/schemas/SimpleModelWithArrayProperty' + myObject: + type: object + SelfReference: + items: {} + type: array + SelfReferenceOneOf: + oneOf: + - type: string + - type: boolean + SelfReferenceAnyOf: + anyOf: + - type: string + - type: boolean + SelfReferenceAdditionalProperties: + additionalProperties: {} + properties: + dummy: + type: string updatePetWithForm_request: properties: name: @@ -845,6 +1193,36 @@ components: description: file to upload format: binary type: string + _ref_ref_to_path_level_parameter_oneof_ref_to_oneof_parameter: + oneOf: + - type: string + - type: integer + ref_to_ref_parameter_anyof_ref_to_anyof_parameter: + oneOf: + - type: string + - items: + type: string + type: array + _fake_webhooks_sources_deleted_post_request_event: + properties: + event_id: + type: string + required: + - event_id + _fake_webhooks_sources_deleted_post_request: + description: inline schema in webhooks + properties: + event_timestamp: + format: date-time + type: string + event_type: + type: string + event: + $ref: '#/components/schemas/_fake_webhooks_sources_deleted_post_request_event' + required: + - event + - event_timestamp + - event_type securitySchemes: petstore_auth: flows: diff --git a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java index f993e935c7aa..70968d44d7c1 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java @@ -58,6 +58,35 @@ public class JSON { @SuppressWarnings("unchecked") public static GsonBuilder createGson() { GsonFireBuilder fireBuilder = new GsonFireBuilder() + .registerTypeSelector(org.openapitools.client.model.Animal.class, new TypeSelector() { + @Override + public Class getClassForElement(JsonElement readElement) { + Map classByDiscriminatorValue = new HashMap(); + classByDiscriminatorValue.put("Cat", org.openapitools.client.model.Cat.class); + classByDiscriminatorValue.put("Dog", org.openapitools.client.model.Dog.class); + classByDiscriminatorValue.put("Animal", org.openapitools.client.model.Animal.class); + return getClassByDiscriminator(classByDiscriminatorValue, + getDiscriminatorValue(readElement, "className")); + } + }) + .registerTypeSelector(org.openapitools.client.model.Cat.class, new TypeSelector() { + @Override + public Class getClassForElement(JsonElement readElement) { + Map classByDiscriminatorValue = new HashMap(); + classByDiscriminatorValue.put("Cat", org.openapitools.client.model.Cat.class); + return getClassByDiscriminator(classByDiscriminatorValue, + getDiscriminatorValue(readElement, "className")); + } + }) + .registerTypeSelector(org.openapitools.client.model.Dog.class, new TypeSelector() { + @Override + public Class getClassForElement(JsonElement readElement) { + Map classByDiscriminatorValue = new HashMap(); + classByDiscriminatorValue.put("Dog", org.openapitools.client.model.Dog.class); + return getClassByDiscriminator(classByDiscriminatorValue, + getDiscriminatorValue(readElement, "className")); + } + }) ; GsonBuilder builder = fireBuilder.createGsonBuilder(); return builder; @@ -93,10 +122,28 @@ private static Class getClassByDiscriminator(Map classByDiscriminatorValue, Stri gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter); gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter); gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AllOfSimpleModel.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyTypeTest.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ArrayOfSameRef.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Category.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference1.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference2.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference3.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Dog.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.FakeWebhooksSourcesDeletedPostRequest.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.FakeWebhooksSourcesDeletedPostRequestEvent.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ModelApiResponse.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.OneOfStringOrInt.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Order.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Pet.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.RefRefToPathLevelParameterOneofRefToOneofParameter.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.RefToRefParameterAnyofRefToAnyofParameter.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SelfReferenceAdditionalProperties.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SelfReferenceAnyOf.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SelfReferenceOneOf.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.SimpleModelWithArrayProperty.CustomTypeAdapterFactory()); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.StringOrInt.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Tag.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.User.CustomTypeAdapterFactory()); gson = gsonBuilder.create(); diff --git a/samples/server/petstore/kotlin-server-modelMutable/build.gradle b/samples/server/petstore/kotlin-server-modelMutable/build.gradle deleted file mode 100644 index bd883dc22910..000000000000 --- a/samples/server/petstore/kotlin-server-modelMutable/build.gradle +++ /dev/null @@ -1,74 +0,0 @@ -group "org.openapitools" -version "1.0.0" - -wrapper { - gradleVersion = "7.4.2" - distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip" -} - -buildscript { - ext.kotlin_version = "1.7.20" - ext.ktor_version = "2.2.1" - ext.shadow_version = "6.1.0" - - repositories { - maven { url "https://repo1.maven.org/maven2" } - maven { url "https://plugins.gradle.org/m2/" } - } - dependencies { - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version") - classpath("com.github.jengelman.gradle.plugins:shadow:$shadow_version") - } -} - -apply plugin: "java" -apply plugin: "kotlin" -apply plugin: "application" - -mainClassName = "io.ktor.server.netty.DevelopmentEngine" - -// Initialization order with shadow 2.0.1 and Gradle 6.9 is weird. -// See https://github.com/johnrengelman/shadow/issues/336#issuecomment-355402508 -apply plugin: "com.github.johnrengelman.shadow" - -sourceCompatibility = 1.8 - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} - -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" -} - -shadowJar { - baseName = "kotlin-server" - classifier = null - version = null -} - -repositories { - maven { setUrl("https://repo1.maven.org/maven2") } - maven { setUrl("https://dl.bintray.com/kotlin/ktor") } - maven { setUrl("https://dl.bintray.com/kotlin/kotlinx") } -} - -dependencies { - implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version") - implementation("ch.qos.logback:logback-classic:1.2.9") - implementation("com.typesafe:config:1.4.1") - implementation("io.ktor:ktor-server-auth:$ktor_version") - implementation("io.ktor:ktor-client-apache:$ktor_version") - implementation("io.ktor:ktor-server-auto-head-response:$ktor_version") - implementation("io.ktor:ktor-server-default-headers:$ktor_version") - implementation("io.ktor:ktor-server-content-negotiation:$ktor_version") - implementation("io.ktor:ktor-serialization-gson:$ktor_version") - implementation("io.ktor:ktor-server-resources:$ktor_version") - implementation("io.ktor:ktor-server-hsts:$ktor_version") - implementation("io.ktor:ktor-server-compression:$ktor_version") - implementation("io.dropwizard.metrics:metrics-core:4.1.18") - implementation("io.ktor:ktor-server-metrics:$ktor_version") - implementation("io.ktor:ktor-server-netty:$ktor_version") - - testImplementation("junit:junit:4.13.2") -} diff --git a/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts b/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts index ac3166e2f3a2..1e91d49feaf6 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts +++ b/samples/server/petstore/kotlin-server-modelMutable/build.gradle.kts @@ -7,7 +7,7 @@ version = "1.0.0" plugins { kotlin("jvm") version "2.0.20" - id("io.ktor.plugin") version "3.0.2" + application kotlin("plugin.serialization") version "2.0.20" } @@ -23,6 +23,7 @@ repositories { } dependencies { + implementation(platform("io.ktor:ktor-bom:3.0.2")) implementation("ch.qos.logback:logback-classic:$logback_version") implementation("com.typesafe:config:1.4.1") implementation("io.ktor:ktor-server-auth") diff --git a/samples/server/petstore/kotlin-server/ktor/build.gradle.kts b/samples/server/petstore/kotlin-server/ktor/build.gradle.kts index ac3166e2f3a2..1e91d49feaf6 100644 --- a/samples/server/petstore/kotlin-server/ktor/build.gradle.kts +++ b/samples/server/petstore/kotlin-server/ktor/build.gradle.kts @@ -7,7 +7,7 @@ version = "1.0.0" plugins { kotlin("jvm") version "2.0.20" - id("io.ktor.plugin") version "3.0.2" + application kotlin("plugin.serialization") version "2.0.20" } @@ -23,6 +23,7 @@ repositories { } dependencies { + implementation(platform("io.ktor:ktor-bom:3.0.2")) implementation("ch.qos.logback:logback-classic:$logback_version") implementation("com.typesafe:config:1.4.1") implementation("io.ktor:ktor-server-auth") From 89fbdab406a98be780cfb2d1c121a48cbedab23b Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Mon, 9 Dec 2024 09:59:05 +0200 Subject: [PATCH 5/9] [Kotlin Server] Fix the string value for serialization key --- docs/generators/kotlin-server.md | 2 +- .../org/openapitools/codegen/languages/KotlinServerCodegen.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/generators/kotlin-server.md b/docs/generators/kotlin-server.md index d1871b49f88d..d4fb9018ec0b 100644 --- a/docs/generators/kotlin-server.md +++ b/docs/generators/kotlin-server.md @@ -18,11 +18,11 @@ These options may be applied as additional-properties (cli) or configOptions (pl | Option | Description | Values | Default | | ------ | ----------- | ------ | ------- | -|Whether Kotlin serialization should be used|Whether Kotlin serialization should be used| |true| |additionalModelTypeAnnotations|Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)| |null| |apiSuffix|suffix for api classes| |Api| |artifactId|Generated artifact id (name of jar).| |kotlin-server| |artifactVersion|Generated artifact's package version.| |1.0.0| +|enableKotlinSerialization|enableKotlinSerialization| |true| |enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original| |featureAutoHead|Automatically provide responses to HEAD requests for existing routes that have the GET verb defined.| |true| |featureCORS|Ktor by default provides an interceptor for implementing proper support for Cross-Origin Resource Sharing (CORS). See enable-cors.org.| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 13744a69f92a..81d2dc51ba4e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -369,7 +369,7 @@ public static class Constants { public static final String USE_MUTINY_DESC = "Whether to use Mutiny (should not be used with useCoroutines). This option is currently supported only when using jaxrs-spec library."; public static final String OMIT_GRADLE_WRAPPER = "omitGradleWrapper"; public static final String OMIT_GRADLE_WRAPPER_DESC = "Whether to omit Gradle wrapper for creating a sub project."; - public static final String KOTLIN_SERIALIZATION = "Whether Kotlin serialization should be used"; + public static final String KOTLIN_SERIALIZATION = "enableKotlinSerialization"; } @Override From a73ad15a0ab9657fc105f6871abb832e0d752648 Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Tue, 10 Dec 2024 14:16:29 +0200 Subject: [PATCH 6/9] [Kotlin Server] Remove setting Kotlin serialization flag to true --- .../codegen/languages/KotlinServerCodegen.java | 2 -- .../main/resources/kotlin-server/data_class.mustache | 10 +++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 81d2dc51ba4e..f91f2ae72726 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -295,8 +295,6 @@ public void processOpts() { supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.properties")); if (isKtor()) { - setKotlinSerializationEnabled(true); - if (additionalProperties.containsKey(Constants.KOTLIN_SERIALIZATION)) { setKotlinSerializationEnabled(convertPropertyToBooleanAndWriteBack(Constants.KOTLIN_SERIALIZATION)); } else { diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache index 1b4d1fcd7fe8..9ce441e7a8e7 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache @@ -5,9 +5,9 @@ {{#serializableModel}} import java.io.Serializable {{/serializableModel}} -{{#kotlinSerialization}} - import kotlinx.serialization.Serializable -{{/kotlinSerialization}} +{{#enableKotlinSerialization}} +import kotlinx.serialization.Serializable +{{/enableKotlinSerialization}} /** * {{{description}}} {{#vars}} @@ -17,9 +17,9 @@ {{#parcelizeModels}} @Parcelize {{/parcelizeModels}} -{{#kotlinSerialization}} +{{#enableKotlinSerialization}} @Serializable -{{/kotlinSerialization}} +{{/enableKotlinSerialization}} {{#hasVars}}data {{/hasVars}}class {{classname}}( {{#requiredVars}} {{>data_class_req_var}}{{^-last}}, From 4763a37aef6e68827d45972126de5543001542a5 Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Tue, 10 Dec 2024 14:16:39 +0200 Subject: [PATCH 7/9] [Kotlin Server] Remove setting Kotlin serialization flag to true --- .../src/main/kotlin/org/openapitools/server/models/Category.kt | 2 ++ .../kotlin/org/openapitools/server/models/ModelApiResponse.kt | 2 ++ .../src/main/kotlin/org/openapitools/server/models/Order.kt | 2 ++ .../src/main/kotlin/org/openapitools/server/models/Pet.kt | 2 ++ .../src/main/kotlin/org/openapitools/server/models/Tag.kt | 2 ++ .../src/main/kotlin/org/openapitools/server/models/User.kt | 2 ++ .../src/main/kotlin/org/openapitools/server/models/Category.kt | 2 ++ .../kotlin/org/openapitools/server/models/ModelApiResponse.kt | 2 ++ .../src/main/kotlin/org/openapitools/server/models/Order.kt | 2 ++ .../ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt | 2 ++ .../ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt | 2 ++ .../ktor/src/main/kotlin/org/openapitools/server/models/User.kt | 2 ++ 12 files changed, 24 insertions(+) diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt index b22939b05947..82813cdbff3e 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,11 +12,13 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ +@Serializable data class Category( var id: kotlin.Long? = null, var name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index cd59353be8f0..dcc1ed13510b 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,12 +12,14 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ +@Serializable data class ModelApiResponse( var code: kotlin.Int? = null, var type: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt index b06af02aec05..d5a9b56748f7 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -21,6 +22,7 @@ package org.openapitools.server.models * @param status Order Status * @param complete */ +@Serializable data class Order( var id: kotlin.Long? = null, var petId: kotlin.Long? = null, diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt index 2fd28652dcd8..e9095e0a7c60 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,6 +14,7 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag +import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -23,6 +24,7 @@ import org.openapitools.server.models.Tag * @param tags * @param status pet status in the store */ +@Serializable data class Pet( var name: kotlin.String, var photoUrls: kotlin.collections.MutableList, diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt index 4c697bab29ae..26a16d0acc37 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,11 +12,13 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ +@Serializable data class Tag( var id: kotlin.Long? = null, var name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt index 9e2799f69ca9..57f4e607386a 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,6 +12,7 @@ package org.openapitools.server.models +import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -23,6 +24,7 @@ package org.openapitools.server.models * @param phone * @param userStatus User Status */ +@Serializable data class User( var id: kotlin.Long? = null, var username: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt index 60715998c2a0..d5270c0579d5 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -13,11 +13,13 @@ package org.openapitools.server.models import java.io.Serializable +import kotlinx.serialization.Serializable /** * A category for a pet * @param id * @param name */ +@Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 37fe31a0e035..1f06009d15bb 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -13,12 +13,14 @@ package org.openapitools.server.models import java.io.Serializable +import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource * @param code * @param type * @param message */ +@Serializable data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt index e7b861dee4ec..fcffa006e9e0 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -13,6 +13,7 @@ package org.openapitools.server.models import java.io.Serializable +import kotlinx.serialization.Serializable /** * An order for a pets from the pet store * @param id @@ -22,6 +23,7 @@ package org.openapitools.server.models * @param status Order Status * @param complete */ +@Serializable data class Order( val id: kotlin.Long? = null, val petId: kotlin.Long? = null, diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt index 2d025bfba231..306fa7a8ec4d 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -15,6 +15,7 @@ import org.openapitools.server.models.Category import org.openapitools.server.models.Tag import java.io.Serializable +import kotlinx.serialization.Serializable /** * A pet for sale in the pet store * @param name @@ -24,6 +25,7 @@ import org.openapitools.server.models.Tag * @param tags * @param status pet status in the store */ +@Serializable data class Pet( val name: kotlin.String, val photoUrls: kotlin.collections.List, diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt index e9d0d7f076bb..fad13b29bc10 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -13,11 +13,13 @@ package org.openapitools.server.models import java.io.Serializable +import kotlinx.serialization.Serializable /** * A tag for a pet * @param id * @param name */ +@Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt index 79cb2b3f6ff6..35cb36430887 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt @@ -13,6 +13,7 @@ package org.openapitools.server.models import java.io.Serializable +import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store * @param id @@ -24,6 +25,7 @@ package org.openapitools.server.models * @param phone * @param userStatus User Status */ +@Serializable data class User( val id: kotlin.Long? = null, val username: kotlin.String? = null, From c345e6a84b584282545612f1c77fb16244dad203 Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Tue, 10 Dec 2024 16:56:02 +0200 Subject: [PATCH 8/9] [Kotlin Server] Remove the option to enable Kotlin serialization --- docs/generators/kotlin-server.md | 1 - .../languages/KotlinServerCodegen.java | 11 ++------ .../kotlin-server/data_class.mustache | 26 ++++++++++--------- .../openapitools/server/models/Category.kt | 3 +-- .../server/models/ModelApiResponse.kt | 3 +-- .../org/openapitools/server/models/Order.kt | 3 +-- .../org/openapitools/server/models/Pet.kt | 3 +-- .../org/openapitools/server/models/Tag.kt | 3 +-- .../org/openapitools/server/models/User.kt | 3 +-- 9 files changed, 22 insertions(+), 34 deletions(-) diff --git a/docs/generators/kotlin-server.md b/docs/generators/kotlin-server.md index d4fb9018ec0b..9e8c7c2291df 100644 --- a/docs/generators/kotlin-server.md +++ b/docs/generators/kotlin-server.md @@ -22,7 +22,6 @@ These options may be applied as additional-properties (cli) or configOptions (pl |apiSuffix|suffix for api classes| |Api| |artifactId|Generated artifact id (name of jar).| |kotlin-server| |artifactVersion|Generated artifact's package version.| |1.0.0| -|enableKotlinSerialization|enableKotlinSerialization| |true| |enumPropertyNaming|Naming convention for enum properties: 'camelCase', 'PascalCase', 'snake_case', 'UPPERCASE', and 'original'| |original| |featureAutoHead|Automatically provide responses to HEAD requests for existing routes that have the GET verb defined.| |true| |featureCORS|Ktor by default provides an interceptor for implementing proper support for Cross-Origin Resource Sharing (CORS). See enable-cors.org.| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index f91f2ae72726..454ac58a6c52 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -51,8 +51,6 @@ public class KotlinServerCodegen extends AbstractKotlinCodegen implements BeanVa @Getter @Setter private Boolean compressionFeatureEnabled = true; @Getter @Setter - private Boolean kotlinSerializationEnabled = true; - @Getter @Setter private Boolean resourcesFeatureEnabled = true; @Getter @Setter private Boolean metricsFeatureEnabled = true; @@ -138,7 +136,6 @@ public KotlinServerCodegen() { addSwitch(Constants.AUTOMATIC_HEAD_REQUESTS, Constants.AUTOMATIC_HEAD_REQUESTS_DESC, getAutoHeadFeatureEnabled()); addSwitch(Constants.CONDITIONAL_HEADERS, Constants.CONDITIONAL_HEADERS_DESC, getConditionalHeadersFeatureEnabled()); addSwitch(Constants.HSTS, Constants.HSTS_DESC, getHstsFeatureEnabled()); - addSwitch(Constants.KOTLIN_SERIALIZATION, Constants.KOTLIN_SERIALIZATION, getKotlinSerializationEnabled()); addSwitch(Constants.CORS, Constants.CORS_DESC, getCorsFeatureEnabled()); addSwitch(Constants.COMPRESSION, Constants.COMPRESSION_DESC, getCompressionFeatureEnabled()); addSwitch(Constants.RESOURCES, Constants.RESOURCES_DESC, getResourcesFeatureEnabled()); @@ -295,11 +292,7 @@ public void processOpts() { supportingFiles.add(new SupportingFile("gradle.properties", "", "gradle.properties")); if (isKtor()) { - if (additionalProperties.containsKey(Constants.KOTLIN_SERIALIZATION)) { - setKotlinSerializationEnabled(convertPropertyToBooleanAndWriteBack(Constants.KOTLIN_SERIALIZATION)); - } else { - additionalProperties.put(Constants.KOTLIN_SERIALIZATION, getKotlinSerializationEnabled()); - } + additionalProperties.put(Constants.IS_KTOR, true); supportingFiles.add(new SupportingFile("AppMain.kt.mustache", packageFolder, "AppMain.kt")); supportingFiles.add(new SupportingFile("Configuration.kt.mustache", packageFolder, "Configuration.kt")); @@ -367,7 +360,7 @@ public static class Constants { public static final String USE_MUTINY_DESC = "Whether to use Mutiny (should not be used with useCoroutines). This option is currently supported only when using jaxrs-spec library."; public static final String OMIT_GRADLE_WRAPPER = "omitGradleWrapper"; public static final String OMIT_GRADLE_WRAPPER_DESC = "Whether to omit Gradle wrapper for creating a sub project."; - public static final String KOTLIN_SERIALIZATION = "enableKotlinSerialization"; + public static final String IS_KTOR = "isKtor"; } @Override diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache index 9ce441e7a8e7..d7c41d201e97 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/data_class.mustache @@ -1,13 +1,15 @@ -{{#parcelizeModels}} - import android.os.Parcelable - import kotlinx.parcelize.Parcelize -{{/parcelizeModels}} -{{#serializableModel}} - import java.io.Serializable -{{/serializableModel}} -{{#enableKotlinSerialization}} +{{#isKtor}} import kotlinx.serialization.Serializable -{{/enableKotlinSerialization}} +{{/isKtor}} +{{^isKtor}} + {{#parcelizeModels}} +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + {{/parcelizeModels}} + {{#serializableModel}} +import java.io.Serializable + {{/serializableModel}} +{{/isKtor}} /** * {{{description}}} {{#vars}} @@ -17,16 +19,16 @@ import kotlinx.serialization.Serializable {{#parcelizeModels}} @Parcelize {{/parcelizeModels}} -{{#enableKotlinSerialization}} +{{#isKtor}} @Serializable -{{/enableKotlinSerialization}} +{{/isKtor}} {{#hasVars}}data {{/hasVars}}class {{classname}}( {{#requiredVars}} {{>data_class_req_var}}{{^-last}}, {{/-last}}{{/requiredVars}}{{#hasRequired}}{{#hasOptional}}, {{/hasOptional}}{{/hasRequired}}{{#optionalVars}}{{>data_class_opt_var}}{{^-last}}, {{/-last}}{{/optionalVars}} -){{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}} +){{^isKtor}}{{^serializableModel}}{{#parcelizeModels}} : Parcelable{{/parcelizeModels}}{{/serializableModel}}{{^parcelizeModels}}{{#serializableModel}}: Serializable {{/serializableModel}}{{/parcelizeModels}}{{#parcelizeModels}}{{#serializableModel}} : Parcelable, Serializable {{/serializableModel}}{{/parcelizeModels}}{{/isKtor}} {{#vendorExtensions.x-has-data-class-body}} { {{/vendorExtensions.x-has-data-class-body}} diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt index d5270c0579d5..7647c2d227e0 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Category.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models - import java.io.Serializable import kotlinx.serialization.Serializable /** * A category for a pet @@ -23,7 +22,7 @@ import kotlinx.serialization.Serializable data class Category( val id: kotlin.Long? = null, val name: kotlin.String? = null -): Serializable +) { } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt index 1f06009d15bb..e16d42e86a4e 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/ModelApiResponse.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models - import java.io.Serializable import kotlinx.serialization.Serializable /** * Describes the result of uploading an image resource @@ -25,7 +24,7 @@ data class ModelApiResponse( val code: kotlin.Int? = null, val type: kotlin.String? = null, val message: kotlin.String? = null -): Serializable +) { } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt index fcffa006e9e0..b1a711510fc6 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Order.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models - import java.io.Serializable import kotlinx.serialization.Serializable /** * An order for a pets from the pet store @@ -32,7 +31,7 @@ data class Order( /* Order Status */ val status: Order.Status? = null, val complete: kotlin.Boolean? = false -): Serializable +) { /** * Order Status diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt index 306fa7a8ec4d..8fe934cc3ff3 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Pet.kt @@ -14,7 +14,6 @@ package org.openapitools.server.models import org.openapitools.server.models.Category import org.openapitools.server.models.Tag - import java.io.Serializable import kotlinx.serialization.Serializable /** * A pet for sale in the pet store @@ -34,7 +33,7 @@ data class Pet( val tags: kotlin.collections.List? = null, /* pet status in the store */ val status: Pet.Status? = null -): Serializable +) { /** * pet status in the store diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt index fad13b29bc10..fae4d9d0ba3c 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/Tag.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models - import java.io.Serializable import kotlinx.serialization.Serializable /** * A tag for a pet @@ -23,7 +22,7 @@ import kotlinx.serialization.Serializable data class Tag( val id: kotlin.Long? = null, val name: kotlin.String? = null -): Serializable +) { } diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt index 35cb36430887..af04fd61c1cf 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/models/User.kt @@ -12,7 +12,6 @@ package org.openapitools.server.models - import java.io.Serializable import kotlinx.serialization.Serializable /** * A User who is purchasing from the pet store @@ -36,7 +35,7 @@ data class User( val phone: kotlin.String? = null, /* User Status */ val userStatus: kotlin.Int? = null -): Serializable +) { } From 7198f718a893fee7f3cff940c606645a659f4e14 Mon Sep 17 00:00:00 2001 From: "Aleksei.Tirman" Date: Wed, 11 Dec 2024 16:39:39 +0200 Subject: [PATCH 9/9] [Kotlin Server] Use query parameters --- .../codegen/languages/KotlinServerCodegen.java | 7 +++++++ .../kotlin-server/libraries/ktor/Paths.kt.mustache | 2 +- .../src/main/kotlin/org/openapitools/server/Paths.kt | 6 +++--- .../ktor/src/main/kotlin/org/openapitools/server/Paths.kt | 6 +++--- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java index 454ac58a6c52..6157644fe577 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinServerCodegen.java @@ -382,6 +382,13 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List ops = operations.getOperation(); ops.forEach(operation -> { + if (isKtor()) { + ArrayList params = new ArrayList<>(); + params.addAll(operation.pathParams); + params.addAll(operation.queryParams); + operation.vendorExtensions.put("ktor-params", params); + } + List responses = operation.responses; if (responses != null) { responses.forEach(resp -> { diff --git a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache index 48c8a7e49d88..37369e01463b 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-server/libraries/ktor/Paths.kt.mustache @@ -18,7 +18,7 @@ object Paths { {{#allParams}}* @param {{paramName}} {{description}} {{^required}}(optional{{#defaultValue}}, default to {{{.}}}{{/defaultValue}}){{/required}} {{/allParams}}*/ {{#hasParams}} - @Resource("{{{path}}}") class {{operationId}}({{#pathParams}}val {{paramName}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/pathParams}}) + @Resource("{{{path}}}") class {{operationId}}({{#vendorExtensions.ktor-params}}val {{paramName}}: {{{dataType}}}{{^required}}? = null{{/required}}{{#required}}{{#isNullable}}?{{/isNullable}}{{/required}}{{^-last}}, {{/-last}}{{/vendorExtensions.ktor-params}}) {{/hasParams}} {{^hasParams}} @Resource("{{{path}}}") class {{operationId}} diff --git a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt index 96b4afcaa488..c9a28c0ace5e 100644 --- a/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt +++ b/samples/server/petstore/kotlin-server-modelMutable/src/main/kotlin/org/openapitools/server/Paths.kt @@ -36,14 +36,14 @@ object Paths { * Multiple status values can be provided with comma separated strings * @param status Status values that need to be considered for filter */ - @Resource("/pet/findByStatus") class findPetsByStatus() + @Resource("/pet/findByStatus") class findPetsByStatus(val status: kotlin.collections.MutableList) /** * Finds Pets by tags * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * @param tags Tags to filter by */ - @Resource("/pet/findByTags") class findPetsByTags() + @Resource("/pet/findByTags") class findPetsByTags(val tags: kotlin.collections.MutableList) /** * Find pet by ID @@ -145,7 +145,7 @@ object Paths { * @param username The user name for login * @param password The password for login in clear text */ - @Resource("/user/login") class loginUser() + @Resource("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String) /** * Logs out current logged in user session diff --git a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt index 96b4afcaa488..0dc3888eb309 100644 --- a/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt +++ b/samples/server/petstore/kotlin-server/ktor/src/main/kotlin/org/openapitools/server/Paths.kt @@ -36,14 +36,14 @@ object Paths { * Multiple status values can be provided with comma separated strings * @param status Status values that need to be considered for filter */ - @Resource("/pet/findByStatus") class findPetsByStatus() + @Resource("/pet/findByStatus") class findPetsByStatus(val status: kotlin.collections.List) /** * Finds Pets by tags * Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. * @param tags Tags to filter by */ - @Resource("/pet/findByTags") class findPetsByTags() + @Resource("/pet/findByTags") class findPetsByTags(val tags: kotlin.collections.List) /** * Find pet by ID @@ -145,7 +145,7 @@ object Paths { * @param username The user name for login * @param password The password for login in clear text */ - @Resource("/user/login") class loginUser() + @Resource("/user/login") class loginUser(val username: kotlin.String, val password: kotlin.String) /** * Logs out current logged in user session