Bug Report Checklist
Description
The models doesn't implement the discriminator interface.
See:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true)
@JsonSubTypes(
JsonSubTypes.Type(value = Plane::class, name = "PLANE"),
JsonSubTypes.Type(value = Ship::class, name = "SHIP"),
JsonSubTypes.Type(value = Truck::class, name = "TRUCK")
)
interface Vehicle {
}
data class Ship (
@field:JsonProperty("weight")
val weight: java.math.BigDecimal,
@field:JsonProperty("sailLength")
val sailLength: java.math.BigDecimal
)
The ship should be generated to this:
data class Ship (
@field:JsonProperty("weight")
val weight: java.math.BigDecimal,
@field:JsonProperty("sailLength")
val sailLength: java.math.BigDecimal
) : Vehicle
openapi-generator version
5.1.1
OpenAPI declaration file content or url
Check this code: https://gist.github.com/alitams/0df475eba74770f70954bf132a583afc
Generation Details
generatorName: kotlin
outputDir: samples/client/petstore/kotlin-jackson
inputSpec: modules/openapi-generator/src/test/resources/2_0/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/kotlin-client
additionalProperties:
serializationLibrary: jackson
Steps to reproduce
Generate the yaml above with the given configuration.
Suggest a fix
- Add this to the constructor in KotlinClientCodegen.java:
useOneOfInterfaces = true
addOneOfInterfaceImports = true
- Modify the 55th line number in data_class.mustache with this (add vendorExtensions.x-implements items):
){{/discriminator}}{{#parent}}{{^serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : Serializable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : Serializable, Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{^parcelizeModels}}{{#vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{^parcelizeModels}}{{#vendorExtensions.x-implements}} : Serializable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : Serializable, Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{^parcelizeModels}}{{#vendorExtensions.x-implements}}{{#-first}}: {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#vendorExtensions.x-has-data-class-body}} {
Bug Report Checklist
Description
The models doesn't implement the discriminator interface.
See:
The ship should be generated to this:
openapi-generator version
5.1.1
OpenAPI declaration file content or url
Check this code: https://gist.github.com/alitams/0df475eba74770f70954bf132a583afc
Generation Details
Steps to reproduce
Generate the yaml above with the given configuration.
Suggest a fix
){{/discriminator}}{{#parent}}{{^serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : Serializable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{#parcelizeModels}}{{^vendorExtensions.x-implements}} : Serializable, Parcelable{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{^parcelizeModels}}{{^vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{^parcelizeModels}}{{#vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{^serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#parent}}{{#serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : {{{parent}}}{{#isMap}}(){{/isMap}}{{#isArray}}(){{/isArray}}, Serializable, Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{^parcelizeModels}}{{#vendorExtensions.x-implements}} : Serializable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{#serializableModel}}{{#parcelizeModels}}{{#vendorExtensions.x-implements}} : Serializable, Parcelable, {{{.}}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{^parent}}{{^serializableModel}}{{^parcelizeModels}}{{#vendorExtensions.x-implements}}{{#-first}}: {{{.}}}{{/-first}}{{^-first}}, {{{.}}}{{/-first}}{{#-last}} {{/-last}}{{/vendorExtensions.x-implements}}{{/parcelizeModels}}{{/serializableModel}}{{/parent}}{{#vendorExtensions.x-has-data-class-body}} {