Open
Description
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")
}