Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Issues
  • #13484
Closed
Open
Issue created Sep 21, 2022 by Administrator@rootContributor

[BUG] [JAVA] when using discriminator pattern the java generator creates a class with many properties instead of an interface

Created by: FinKingma

Description

The issue seems to occur in the java generator start in version 5.0.0, and still occurs in the latest version 6.1.0. When using the discriminator pattern as described in the documentation, we no longer receive an interface object for the base class, but a class that contains all of the properties of all the OneOf objects. In the old version of the generator (4.3.1) an interface is generated, which is implemented by the classes generated by the oneOf's. I have omitted the generated annotations, since the problem lies in the java objects being generated.

4.3.1 situation
public interface PetResponse  {
    public String getPetType();
}
public class Lizard implements PetResponse {
...
5.0.0 and on (6.1.0 still occurs)
public class PetResponse {
public static final String JSON_PROPERTY_CAT_NAME = "catName";
  private String catName;

  public static final String JSON_PROPERTY_PET_TYPE = "petType";
  protected String petType;

  public static final String JSON_PROPERTY_BARK = "bark";
  private String bark;

  public static final String JSON_PROPERTY_LOVES_ROCKS = "lovesRocks";
  private Boolean lovesRocks;
...
public class Lizard {
  public static final String JSON_PROPERTY_LOVES_ROCKS = "lovesRocks";
  private Boolean lovesRocks;

  public static final String JSON_PROPERTY_PET_TYPE = "petType";
  private String petType;
....
openapi-generator version

This still worked in version 4.3.1 it broke in version 5.0.0 it still fails in 6.1.0

OpenAPI declaration file content or url
openapi: "3.0.3"
info:
  title: MS Pet API
  version: 1.0.0
  description: De API for testing the discriminator in openapi 6
paths:
  /api/projects:
    get:
      summary: get a pet
      operationId: getPets
      tags:
        - pets
      responses:
        200:
          description: Succes respons
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PetResponse'

components:
  schemas:
    PetResponse:
      oneOf:
        - $ref: '#/components/schemas/Cat'
        - $ref: '#/components/schemas/Dog'
        - $ref: '#/components/schemas/Lizard'
      discriminator:
        propertyName: petType
    Cat:
      type: object
      # all other properties specific to a `Cat`
      required:
        - petType
      properties:
        catName:
          type: string
        petType:
          type: string
    Dog:
      type: object
      # all other properties specific to a `Dog`
      required:
        - petType
      properties:
        bark:
          type: string
        petType:
          type: string
    Lizard:
      type: object
      # all other properties specific to a `Lizard`
      required:
        - petType
      properties:
        lovesRocks:
          type: boolean
        petType:
          type: string
Generation Details

We use the java generator, with both the WebClient and RestTemplate libraries. We also use the spring generator, but the interface is generated correctly there, so the problem seems to lie in the java generator.

Steps to reproduce

clone the minimal reproduction repo: https://github.com/FinKingma/specUsingDiscriminator/blob/main/spec.yaml

run ./gradlew openApiGenerate

Related issues/PRs

https://github.com/OpenAPITools/openapi-generator/issues/8495

Assignee
Assign to
Time tracking