最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

openapi generator - Models are not generated when specific apis are selected through the gradle plugin - Stack Overflow

programmeradmin1浏览0评论

I am trying to generate java code from the following openapi example spec

openapi: "3.0.3"
info:
  title: Demo API
  version: "1.0"
servers:
  - url: http://localhost:8080/api
    description: Local development server
tags:
  - name: Common
    description: Operations related to common functionalities. Define multiple tags to generate multiple Api classes.
  - name: Other
    description: To test generation of separate APIs
paths:
  /UM/{id}:
    get:
      tags:
        - Common
      description: Retrieve UM by ID
      operationId: GetUM
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      responses:
        "200":
          description: UM
          content:
            application/json:
              schema: { }
        "404":
          description: UM not found
          content:
            text/plain:
              schema:
                type: string
  /UM:
    post:
      tags:
        - Common
      description: Create new UM
      operationId: CreateUM
      requestBody:
        required: true
        content:
          application/json:
            schema: { }
      responses:
        201:
          description: ID of the newly created UM
          content:
            text/plain:
              schema:
                type: string

  /palettes/{id}:
    get:
      tags:
        - Common
      operationId: getPalette # necessary to generate proper method name
      description: Retrieve a palette by its id
      parameters:
        - in: path
          name: id
          schema:
            type: integer
          required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Palette"
              examples:
                Default:
                  value:
                    id: 1
                    firstName: John
                    lastName: Doe
                    role: user
        "404":
          description: Palette not found
          content:
            text/plain:
              schema:
                type: string
  /palettes:
    get:
      tags:
        - Common
      operationId: listPalettes
      description: Returns the list of palettes
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Palette"

    put:
      tags:
        - Common
      operationId: createPalette # necessary to generate proper method name
      description: Creates a new palette
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewPalette"
      responses:
        "201":
          description: Created
          content:
            text/plain:
              schema:
                type: integer
        "400":
          description: Validation errors
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
  /orders:
    put:
      tags:
        - Common
      operationId: sendOrder
      description: Sends a dummy order
      responses:
        "200":
          description: OK
          content:
            text/plain:
              schema:
                type: string
  /otherresources:
    get:
      tags:
        - Other
      operationId: getOther # necessary to generate proper method name
      description: Example operation
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Palette"

components:
  schemas:
    ObjectType:
      type: string
      enum: [ ENGINE, SEAT ]
    Palette:
      type: object
      x-tags:
        - Common
      properties:
        id:
          type: integer
          description: The user ID
        firstName:
          type: string
          description: The user's first name
        lastName:
          type: string
          description: The palette's last name
          minLength: 1
          maxLength: 20
        role:
          $ref: "#/components/schemas/ObjectType"

    NewPalette:
      type: object
      properties:
        firstName:
          type: string
          description: The user's first name
        lastName:
          type: string
          description: The user's last name
          minLength: 1
          maxLength: 20
        role:
          $ref: "#/components/schemas/ObjectType"

    ValidationErrorField:
      properties:
        field:
          type: string
        message:
          type: string
        constraint:
          type: string
        value:
          type: string
      example:
        - field: name
          message: size must be between 1 and 20
          constraint: Size
          value: This is way toooooooo long a name!

    ValidationError:
      properties:
        status:
          type: string
        message:
          type: string
        errors:
          type: array
          $ref: "#/components/schemas/ValidationErrorField"
      example:
        - status: Bad Request
          message: Validation failed
          errors:
            - field: lastName
              message: size must be between 1 and 20
              constraint: Size
              value: This is wayyyyyy toooo loooooong

  securitySchemes:
    oidc:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: http://localhost:8180/realms/quarkus/protocol/openid-connect/auth
          tokenUrl: http://localhost:8180/realms/quarkus/protocol/openid-connect/token
          refreshUrl: http://localhost:8180/realms/quarkus/protocol/openid-connect/token
          scopes:
            openid: OpenID Connect authentication
security:
  - oidc: [ ]

I am building this with the following gradle task:

openApiGenerate {
    generatorName = 'jaxrs-spec'
    inputSpec = file(openapiSourcefile).absolutePath
    outputDir = file(openapiGeneratedSources).absolutePath
    apiPackage = "${apiPackageName}.controller"
    modelPackage = "${apiPackageName}.model"
    generateAliasAsModel = true
    verbose = true
    globalProperties = [
        'apis'  : project.ext.apisToGenerate,
        'models': 'true'
    ]
    configOptions = [
        interfaceOnly                           : 'true',
        singleContentTypes                      : 'true',
        useSingleRequestMethod                  : 'true',
        useSwaggerAnnotations                   : 'false',
        useTags                                 : 'true',
        dateLibrary                             : 'java8',
        library                                 : 'quarkus',
        useMicroProfileOpenAPIAnnotations       : 'true',
        additionalModelTypeAnnotations          : '@jakarta.validation.constraints.NotNull',
        useBeanValidation                       : 'true',
        useJakartaEe                            : 'true',
        disallowAdditionalPropertiesIfNotPresent: 'false',
        generateModelTests                      : 'false',
        generateModelDocumentation              : 'false',
        generateApiTests                        : 'false',
        generateApiDocumentation                : 'false',
        generateBuilders                        : 'true',
        modelPropertyNaming                     : 'original',
        returnResponse                          : 'true',
    ]
}

And the project.ext.apisToGenerate property is set to 'Common'. The problem I have is that models are not generated. They are only when I remove the selection of apis to generate. But I need to generate only the apis for specific tags.

Any help is appreciated.

Do I need to explicitly list the models I need to generate in the ‘models’ property?

I am trying to generate java code from the following openapi example spec

openapi: "3.0.3"
info:
  title: Demo API
  version: "1.0"
servers:
  - url: http://localhost:8080/api
    description: Local development server
tags:
  - name: Common
    description: Operations related to common functionalities. Define multiple tags to generate multiple Api classes.
  - name: Other
    description: To test generation of separate APIs
paths:
  /UM/{id}:
    get:
      tags:
        - Common
      description: Retrieve UM by ID
      operationId: GetUM
      parameters:
        - in: path
          name: id
          schema:
            type: string
          required: true
      responses:
        "200":
          description: UM
          content:
            application/json:
              schema: { }
        "404":
          description: UM not found
          content:
            text/plain:
              schema:
                type: string
  /UM:
    post:
      tags:
        - Common
      description: Create new UM
      operationId: CreateUM
      requestBody:
        required: true
        content:
          application/json:
            schema: { }
      responses:
        201:
          description: ID of the newly created UM
          content:
            text/plain:
              schema:
                type: string

  /palettes/{id}:
    get:
      tags:
        - Common
      operationId: getPalette # necessary to generate proper method name
      description: Retrieve a palette by its id
      parameters:
        - in: path
          name: id
          schema:
            type: integer
          required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Palette"
              examples:
                Default:
                  value:
                    id: 1
                    firstName: John
                    lastName: Doe
                    role: user
        "404":
          description: Palette not found
          content:
            text/plain:
              schema:
                type: string
  /palettes:
    get:
      tags:
        - Common
      operationId: listPalettes
      description: Returns the list of palettes
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Palette"

    put:
      tags:
        - Common
      operationId: createPalette # necessary to generate proper method name
      description: Creates a new palette
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewPalette"
      responses:
        "201":
          description: Created
          content:
            text/plain:
              schema:
                type: integer
        "400":
          description: Validation errors
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
  /orders:
    put:
      tags:
        - Common
      operationId: sendOrder
      description: Sends a dummy order
      responses:
        "200":
          description: OK
          content:
            text/plain:
              schema:
                type: string
  /otherresources:
    get:
      tags:
        - Other
      operationId: getOther # necessary to generate proper method name
      description: Example operation
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Palette"

components:
  schemas:
    ObjectType:
      type: string
      enum: [ ENGINE, SEAT ]
    Palette:
      type: object
      x-tags:
        - Common
      properties:
        id:
          type: integer
          description: The user ID
        firstName:
          type: string
          description: The user's first name
        lastName:
          type: string
          description: The palette's last name
          minLength: 1
          maxLength: 20
        role:
          $ref: "#/components/schemas/ObjectType"

    NewPalette:
      type: object
      properties:
        firstName:
          type: string
          description: The user's first name
        lastName:
          type: string
          description: The user's last name
          minLength: 1
          maxLength: 20
        role:
          $ref: "#/components/schemas/ObjectType"

    ValidationErrorField:
      properties:
        field:
          type: string
        message:
          type: string
        constraint:
          type: string
        value:
          type: string
      example:
        - field: name
          message: size must be between 1 and 20
          constraint: Size
          value: This is way toooooooo long a name!

    ValidationError:
      properties:
        status:
          type: string
        message:
          type: string
        errors:
          type: array
          $ref: "#/components/schemas/ValidationErrorField"
      example:
        - status: Bad Request
          message: Validation failed
          errors:
            - field: lastName
              message: size must be between 1 and 20
              constraint: Size
              value: This is wayyyyyy toooo loooooong

  securitySchemes:
    oidc:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: http://localhost:8180/realms/quarkus/protocol/openid-connect/auth
          tokenUrl: http://localhost:8180/realms/quarkus/protocol/openid-connect/token
          refreshUrl: http://localhost:8180/realms/quarkus/protocol/openid-connect/token
          scopes:
            openid: OpenID Connect authentication
security:
  - oidc: [ ]

I am building this with the following gradle task:

openApiGenerate {
    generatorName = 'jaxrs-spec'
    inputSpec = file(openapiSourcefile).absolutePath
    outputDir = file(openapiGeneratedSources).absolutePath
    apiPackage = "${apiPackageName}.controller"
    modelPackage = "${apiPackageName}.model"
    generateAliasAsModel = true
    verbose = true
    globalProperties = [
        'apis'  : project.ext.apisToGenerate,
        'models': 'true'
    ]
    configOptions = [
        interfaceOnly                           : 'true',
        singleContentTypes                      : 'true',
        useSingleRequestMethod                  : 'true',
        useSwaggerAnnotations                   : 'false',
        useTags                                 : 'true',
        dateLibrary                             : 'java8',
        library                                 : 'quarkus',
        useMicroProfileOpenAPIAnnotations       : 'true',
        additionalModelTypeAnnotations          : '@jakarta.validation.constraints.NotNull',
        useBeanValidation                       : 'true',
        useJakartaEe                            : 'true',
        disallowAdditionalPropertiesIfNotPresent: 'false',
        generateModelTests                      : 'false',
        generateModelDocumentation              : 'false',
        generateApiTests                        : 'false',
        generateApiDocumentation                : 'false',
        generateBuilders                        : 'true',
        modelPropertyNaming                     : 'original',
        returnResponse                          : 'true',
    ]
}

And the project.ext.apisToGenerate property is set to 'Common'. The problem I have is that models are not generated. They are only when I remove the selection of apis to generate. But I need to generate only the apis for specific tags.

Any help is appreciated.

Do I need to explicitly list the models I need to generate in the ‘models’ property?

Share Improve this question edited Mar 28 at 17:25 Franck Dervaux asked Mar 28 at 16:58 Franck DervauxFranck Dervaux 1233 silver badges13 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

I found the answer in the gradle plugin documentation:

When enabling generation of only specific parts you either have to provide CSV list of what you particularly are generating or provide an empty string "" to generate everything. If you provide "true" it will be treated as a specific name of model or api you want to generate.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论