Skip to content

[BUG][Spring] code generation fails if oneOf discriminator is enum #19194

@jan-mawh

Description

@jan-mawh

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description

I want to limit the possible entries for the discriminator using oneOf. Therefore i want to set the discriminator as enum (See OpenAPI declaration file) below.

The openapi-generator-maven-plugin says:
[WARNING] 'cargoParent' defines discriminator 'unit', but the referenced schema 'TONS' is incorrect. invalid type for unit, set it to string
and the code finally fails to compile.

The Problem is that the generator creates the method

public TonsUnitEnum getUnit() {
    return unit;
  }

in the TONS.java class. But the CargoParents requires a method returning String:

public interface CargoParent {
    String getUnit();
}
openapi-generator version

openapi-generator-maven-plugin 7.7.0

OpenAPI declaration file content or url
openapi: 3.0.3
info:
  title: test
  contact:
    email: support@company.de
  license:
    name: company Licence
    url: https://company.de/
  version: 0.1.1
servers:
  - url: https://webservice.company.org
paths:
  /doSomething:
    post:
      summary: test
      description: description for test operation
      operationId: doSomething
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/doSomethingRequest'
        required: true
      responses:
        '200':
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/doSomethingResponse'
components:
  schemas:
    doSomethingRequest:
      title: doSomethingRequest
      type: object
      properties:
        cargo:
          $ref: '#/components/schemas/cargoParent'
      required:
        - cargo
    doSomethingResponse:
      title: doSomethingResponse
      type: object
    TonsUnitEnum:
      type: string
      enum:
        - Tons
    TONS:
      title: TONS
      type: object
      properties:
        unit:
          $ref: '#/components/schemas/TonsUnitEnum'
        amount:
          type: number
          format: double
          example: 40
          minimum: 0
      required:
        - unit
        - amount
    KILOGRAMS:
      title: KILOGRAMS
      type: object
      properties:
        unit:
          type: string
          pattern: ^KILOGRAMS$
          example: KILOGRAMS
        amount:
          type: number
          format: double
          example: 1000
          minimum: 0
      required:
        - unit
        - amount
    cargoParent:
      title: cargoParent
      type: object
      oneOf:
        - $ref: '#/components/schemas/TONS'
        - $ref: '#/components/schemas/KILOGRAMS'
      discriminator:
        propertyName: unit
        mapping:
          TONS: '#/components/schemas/TONS'
          KILOGRAMS: '#/components/schemas/KILOGRAMS'
Related issues/PRs

#12412

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions