OpenAPITools / OpenAPITools/openapi-generator

[BUG][java][spring][oneOf] imports that do not exist

Open
#4,849 8 comments 7 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Feature: Composition / Inheritance Server: Spring
Dominant language
Java
Stars
26.8k
Forks
7.7k
PR merge metrics
PR metrics pending

Description

Description

I am using openapi-codegen version 4.2.2 and openapi specification 3.0.0 on a Windows 10 Enterprise 64bit system to generate a java server API from a yaml file.
I also opened a stackoverflow question to get a possible answer. But currently I'm not sure if I have to look for the error at my place or at openapi-codegen. Therefore I have opened my first issue here today. If this is not desired, you are welcome to close the issue. It can be found here.

The problem I encounter is, that the generated code tries to import a class that does not exist. The API should accept an object of type pet and return the same pet, but it should also work with all three subtypes of Pet - Dog, Cat, Lizard.

The code generator tries to import the following classes that it did not generated:

import org.openapitools.model.OneOfCatDogLizard;
import org.openapitools.model.OneOfPet;

Furthermore the generator has generated some classes which I cannot understand at my current state of knowledge

CatAllOf.java
DogAllOf.java
LizardAllOf.java

I tried using the inheritence example from the openapi specification and build the following yaml file from it:

openapi-generator version
openapi-codegen version 4.2.2
OpenAPI declaration file content or url
openapi: 3.0.0
info:
  version: 1.0.0
  title: Three Pets
  termsOfService: http://swagger.io/terms
tags:
  - name: test
paths:
  /echoPet:
    post:
      tags:
        - test
      summary: Return input
      description: Send pet get pet
      operationId: echoPet
      parameters:
        - name: pet
          in: query
          schema:
            oneOf:
              - $ref: '#/components/schemas/Cat'
              - $ref: '#/components/schemas/Dog'
              - $ref: '#/components/schemas/Lizard'
      responses:
        "200":
          description: Pet sucesfully returned
          content:
            application/json:
                schema:
                  oneOf:
                    - $ref: '#/components/schemas/Pet'
servers:
  - url: https://localhost:8080/v2
  - url: http://localhost:8080/v2
components:
  schemas:
    Pet:
      type: object
      required:
      - pet_type
      properties:
        pet_type:
          type: string
      discriminator:
        propertyName: pet_type
        mapping:
          cachorro: Dog
    Cat:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Cat`
        properties:
          name:
            type: string
          huntingSkill:
            type: string
            description: The measured skill for hunting
            enum:
            - clueless
            - lazy
            - adventurous
            - aggressive
    Dog:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Dog`
        properties:
          bark:
            type: string
          packSize:
            type: integer
            format: int32
            description: the size of the pack the dog is from
            default: 0
            minimum: 0
    Lizard:
      allOf:
      - $ref: '#/components/schemas/Pet'
      - type: object
        # all other properties specific to a `Lizard`
        properties:
          lovesRocks:
            type: boolean

I validated the yaml file with openapi-generator, but found no error or warning:

$ openapi-generator validate -i test.yaml
Validating spec (test.yaml)
No validation issues detected.

Command line used for generation
openapi-generator generate -i test.yaml -g spring -o /tmp/springTest
Steps to reproduce
  1. create a yaml file with the content above
  2. use the command line seen above to generate java code
Related issues/PRs

The same behaviour can be observed, if you generate a server API with the following command, for jaxrs-cxf:

 openapi-generator generate -i test.yaml -g jaxrs-cxf -o /tmp/jaxrs
Suggest a fix/enhancement

Regards,
skchande

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the issue with the inline OpenAPI specification and the reported openapi-generator generate -i test.yaml -g spring -o /tmp/springTest command. Inspect the generated imports and model classes, then verify that generation no longer references missing OneOfCatDogLizard or OneOfPet classes and that the related AllOf models are handled consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring
Domain
api, backend, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.