openapi-generator icon indicating copy to clipboard operation
openapi-generator copied to clipboard

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

Open gdiegel opened this issue 2 years ago • 5 comments

Bug Report Checklist

  • [x] Have you provided a full/minimal spec to reproduce the issue?
  • [x] Have you validated the input using an OpenAPI validator (example)?
  • [x] Have you tested with the latest master to confirm the issue still exists?
  • [x] Have you searched for related issues/PRs?
  • [x] What's the actual output vs expected output?
  • [ ] [Optional] Sponsorship to speed up the bug fix or feature request (example)
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 avatar May 23 '23 18:05 gdiegel

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

gdiegel avatar May 24 '23 15:05 gdiegel

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 <useJakartaEe> configOptions is it ? "my solution" using microprofileRestClientVersion: "3.0" fixed my issue. the useJakartaEe option seems irrelevant.

drohne1673 avatar Oct 25 '23 10:10 drohne1673

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

marcelstoer avatar Dec 01 '23 16:12 marcelstoer

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.

JenniferKiesel avatar Feb 09 '24 13:02 JenniferKiesel

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.

aaronjwhiteside avatar Feb 15 '24 01:02 aaronjwhiteside

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.

Frontrider avatar Mar 23 '24 17:03 Frontrider