Skip to content

Open Api Generator having issues with api.github.com.json #4815

Open
@joseVega33

Description

@joseVega33

Issue

We were using the Open Api Generator(OAG) to generate some Java models based on the current OAS schema JSON . This generates a wrong-named model when it's doing the ContentDirectory Schema Model, which is called from here

"application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/content-directory"
                    },
                    {
                      "$ref": "#/components/schemas/content-file"
                    },
                    {
                      "$ref": "#/components/schemas/content-symlink"
                    },
                    {
                      "$ref": "#/components/schemas/content-submodule"
                    }
                  ],
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "array": "#/components/schemas/content-directory",
                      "file": "#/components/schemas/content-file",
                      "symlink": "#/components/schemas/content-symlink",
                      "submodule": "#/components/schemas/content-submodule"
                    }
                  }
                }

Possible solution

To patch the bug, I've changed the definition of the schema to avoid the wrong-named model issue. This happens because when OAG couldn't figure out the logic or a declaration, it generates a utility model to patch this issue.
Here is the original ContentDirectory declaration:

"content-directory": {
        "title": "Content Directory",
        "description": "A list of directory items",
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "dir",
                "file",
                "submodule",
                "symlink"
              ]
            },
            "size": {
              "type": "integer"
            },
            "name": {
              "type": "string"
            },
            "path": {
              "type": "string"
            },
            "content": {
              "type": "string"
            },
            "sha": {
              "type": "string"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "git_url": {
              "type": "string",
              "format": "uri",
              "nullable": true
            },
            "html_url": {
              "type": "string",
              "format": "uri",
              "nullable": true
            },
            "download_url": {
              "type": "string",
              "format": "uri",
              "nullable": true
            },
            "_links": {
              "type": "object",
              "properties": {
                "git": {
                  "type": "string",
                  "format": "uri",
                  "nullable": true
                },
                "html": {
                  "type": "string",
                  "format": "uri",
                  "nullable": true
                },
                "self": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "git",
                "html",
                "self"
              ]
            }
          },
          "required": [
            "_links",
            "git_url",
            "html_url",
            "download_url",
            "name",
            "path",
            "sha",
            "size",
            "type",
            "url"
          ]
        }
      }

And here is the modified declaration that we used to patch the issue.

"content-directory": {
  "title": "Content Directory",
  "description": "A list of directory items",
    "type": "object",
    "properties": {
      "type": {
        "type": "string",
        "enum": [
          "array"
        ]
      },
      "size": {
        "type": "integer"
      },
      "name": {
        "type": "string"
      },
      "path": {
        "type": "string"
      },
      "content": {
        "type": "string"
      },
      "sha": {
        "type": "string"
      },
      "url": {
        "type": "string",
        "format": "uri"
      },
      "git_url": {
        "type": "string",
        "format": "uri",
        "nullable": true
      },
      "html_url": {
        "type": "string",
        "format": "uri",
        "nullable": true
      },
      "download_url": {
        "type": "string",
        "format": "uri",
        "nullable": true
      },
      "_links": {
        "type": "object",
        "properties": {
          "git": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "html": {
            "type": "string",
            "format": "uri",
            "nullable": true
          },
          "self": {
            "type": "string",
            "format": "uri"
          }
        },
        "required": [
          "git",
          "html",
          "self"
        ]
      }
    },
    "required": [
      "_links",
      "git_url",
      "html_url",
      "download_url",
      "name",
      "path",
      "sha",
      "size",
      "type",
      "url"
    ]
}

This is the OAG version used to generate the model: 7.11.0
and the config used in the generator:

openApiGenerate {
    generatorName.set("java")
    inputSpec.set("$projectDir/src/main/resources/api.github.com.fixed.json")
    outputDir.set("$buildDir")
    apiPackage.set("com.github.client.api")
    modelPackage.set("com.github.client.model")
    configOptions.put("dateLibrary", "java8")
    ignoreFileOverride.value("$projectDir/.openapi-generator-ignore")
    configOptions.put("library", "apache-httpclient")
    configOptions.put("sourceFolder", "generated/main/java")
    configOptions.put("openApiNullable", "false")
    configOptions.put("invokerPackage", "com.github.client")
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    featurefundamentals-and-supportAdded by Howie to auto-add issues to API Platform KTLO project

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy