OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.24k stars 6.43k forks source link

[BUG] Generator try to use oneOf* model but does not create it #8860

Open Adi1231234 opened 3 years ago

Adi1231234 commented 3 years ago

Bug Report Checklist

Description

On oneOf usage in openAPI declaration the generator try to use oneOf* model but does not create it in any language

openapi-generator version

5.0.1

OpenAPI declaration file content or url
{
  "openapi": "3.0.0",
  "info": {
    "title": "service",
    "description": "API",
    "version": "1.0",
    "contact": {}
  },
  "tags": [],
  "servers": [],
  "components": {
    "schemas": {
      "Category": {
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "parentCategoryId": { "type": "number" }
        },
        "required": ["name", "parentCategoryId"]
      },
      "GetManyCategoryResponseDto": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": { "$ref": "#/components/schemas/Category" }
          },
          "count": { "type": "number" },
          "total": { "type": "number" },
          "page": { "type": "number" },
          "pageCount": { "type": "number" }
        },
        "required": ["data", "count", "total", "page", "pageCount"]
      }
    }
  },
  "paths": {
    "/categories": {
      "get": {
        "operationId": "getManyBaseCategoriesControllerCategory",
        "summary": "Retrieve many Category",
        "parameters": [
          {
            "name": "fields",
            "description": "Selects resource fields",
            "required": false,
            "in": "query",
            "schema": { "type": "array", "items": { "type": "string" } },
            "style": "form",
            "explode": false
          }
        ],
        "responses": {
          "200": {
            "description": "Get many base response",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/GetManyCategoryResponseDto"
                    },
                    {
                      "type": "array",
                      "items": { "$ref": "#/components/schemas/Category" }
                    }
                  ]
                }
              }
            }
          }
        },
        "tags": ["Categories"]
      }
    }
  }
}
Generation Details
Steps to reproduce

execute - java -jar openapi-generator-cli.jar generate -i categories.swagger -o out -g (any language)

then at api/categories_api the generated function is:

Future<Response<OneOfGetManyCategoryResponseDtoarray>> getManyBaseCategoriesControllerCategory({ 
  BuiltList<String> fields,
})

the problem is that OneOfGetManyCategoryResponseDtoarray class does not exist in any file.

Related issues/PRs

#3965 - Similar a bit

Suggest a fix
wing328 commented 3 years ago

java (jersey2, natvie), csharp-netcore, powershell, python, ruby and go have better support for oneOf. Please give these a try when you've time.

germanschnyder commented 3 years ago

Hi @wing328, are there any plans on adding support for other languages ? I'm working with the openapi to proto generator and I noticed the same. Was trying to map openapi's oneOf to protobuf's oneof. Or at least some pain points / checklist you identified for properly implementing this (i.e. where to add code in the codegen to get it working).

wing328 commented 3 years ago

We definitely want to add oneOf, anyof support to all generators. At this stage, we rely on contributions from the community to implement the feature with reference to the generators that support these features or those who need these features with a higher priority can consider sponsoring the tasks to make it a higher priority among the community.

For your case, we welcome contributions from you to add oneOf support to the protobuf-schema generator or you can sponsor the enhancement to have it done by the community.

leus commented 2 years ago

java (jersey2, natvie), csharp-netcore, powershell, python, ruby and go have better support for oneOf. Please give these a try when you've time.

csharp-netcore does not generate compilable code for OneOf nor AnyOf, just like in the provided report.

nikolasten commented 2 years ago

jersey2 and native does not work either