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