OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.91k stars 6.58k forks source link

[BUG][kotlin-server][jaxrs-spec] Model classes don't use jakarta package when `useJakartaEe` is true #15617

Open gdiegel opened 1 year ago

gdiegel commented 1 year ago

Bug Report Checklist

Description

Model classes generated with the combination of kotlin-server generator and jaxrs-spec library don't import jakarta packages when the config option useJakartaEe is set to true.

Actual result
import javax.validation.constraints.*
import javax.validation.Valid

data class CreateLocation (

    @JsonProperty("name")
    @field:Valid
    @field:NotNull
    @field:Size(min=1,max=512) val name: kotlin.String,
Expected result
import jakarta.validation.constraints.*
import jakarta.validation.Valid

data class CreateLocation (

    @JsonProperty("name")
    @field:Valid
    @field:NotNull
    @field:Size(min=1,max=512) val name: kotlin.String,
openapi-generator version

6.6.0

OpenAPI declaration file content or url
openapi: "3.0.1"
info:
  title: example
  version: "1.0"
paths:
  /locations:
    post:
      operationId: createLocation
      tags:
        - location
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateLocation'
      responses:
        '201':
          description: Success
components:
  schemas:
    CreateLocation:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          nullable: false
          minLength: 1
          maxLength: 512
Generation Details
val runOpenApiCodeGenerator = tasks.register<GenerateTask>("runOpenApiCodeGenerator") {
    generatorName.set("kotlin-server")
    inputSpec.set(project.property("openapi.spec") as String)
    outputDir.set("$buildDir/openapi")
    templateDir.set("$rootDir/src/main/resources/openapi/templates")
    apiPackage.set("com.leagueapps.openapi.api")
    modelPackage.set("com.leagueapps.openapi.model")
    typeMappings.set(
        mapOf(
            "DateTime" to "LocalDateTime"
        )
    )
    importMappings.set(
        mapOf(
            "java.time.OffsetDateTime" to "java.time.LocalDateTime"
        )
    )
    configOptions.set(
        mapOf(
            "library" to "jaxrs-spec",
            "useTags" to "true",
            "interfaceOnly" to "true",
            "useCoroutines" to "true",
            "useBeanValidation" to "true",
            "dateLibrary" to "java8",
            "enumPropertyNaming" to "UPPERCASE",
            "hideGenerationTimestamp" to "true",
            "useSwaggerAnnotations" to "false",
            "returnResponse" to "true",
            "useJakartaEe" to "true"
        )
    )
    generateApiTests.set(false)
    generateModelTests.set(false)
    generateApiDocumentation.set(false)
    generateModelDocumentation.set(false)
    outputs.upToDateWhen { false }
    outputs.cacheIf { false }
}
Steps to reproduce
Related issues/PRs
Suggest a fix

I've submitted PR https://github.com/OpenAPITools/openapi-generator/pull/15618 to fix this issue.

gdiegel commented 1 year ago

This is very probably fixed with https://github.com/OpenAPITools/openapi-generator/pull/15593.

drohne1673 commented 1 year ago

says merged. but it looks like it still doesnt work with version 7.0.1 of the plugin. i just tried in a quarkus app and the openapi-generator-maven-plugin 7.0.1: it still generates javax. Even after setting the configOptions is it ? "my solution" using microprofileRestClientVersion: "3.0" fixed my issue. the useJakartaEe option seems irrelevant.

marcelstoer commented 11 months ago

I can confirm that this definitely works with 7.1.0. Issue should be closed I guess.

JenniferKiesel commented 9 months ago

This is only partly fixed. The config option useJakartaEe still produces this error, even though in our case we use the gradle plugin of the openapi generator (org.openapi.generator). It only works when setting as additionalProperties, which clashes with the documentation that says this would be only required for the CLI version.

aaronjwhiteside commented 9 months ago

This is only partly fixed. The config option useJakartaEe still produces this error, even though in our case we use the gradle plugin of the openapi generator (org.openapi.generator). It only works when setting as additionalProperties, which clashes with the documentation that says this would be only required for the CLI version.

This!

And I think the issue is that the code expects a Boolean vs a String, as

This works

    additionalProperties = mapOf(
        "useJakartaEe" to true
    )

But this doesn't

    additionalProperties = mapOf(
        "useJakartaEe" to "true"
    )

This had my scratching my head for a while.

Frontrider commented 8 months ago

I have a second error for it: the generated build file also has the wrong version of jakarta, at least updating it is what fixes intellij not recognizing the annotations.