I just attempted to migrate from swagger-codegen to openapi-generator. It was mostly successful, except the behavior of allOf has changed. Previously the generated Java class would inherit from the first $ref and compose from the rest. With the new generator the Java class still extends the first $ref, as expected. But all the other $refs are ignored. (Their fields are no longer composed directly into the Java class.)
I am using the new Gradle plugin: openapi-generator-gradle-plugin:3.3.2 (much appreciated).
This previously worked with swagger-codegen-cli:3.0.2. In case you're wondering, since there is no official Gradle plugin I was using this org.hidetake.swagger.generator, which wraps the CLI as a Gradle plugin.
See comments next to each $ref:
Foo:
allOf:
- $ref: "#/components/schemas/FooBase" # generated Java extended this class (still works)
- $ref: "#/components/schemas/FooComposed1" # all fields inlined (no longer works)
- $ref: "#/components/schemas/FooComposed2" # all fields inlined (no longer works)
- properties: # other props also inlined (still works)
fooCount:
type: integer
Note: FooBase has a discriminator. The composed models do not:
FooBase:
discriminator:
propertyName: fooType
required:
- fooType
properties:
fooType:
type: string
openApiGenerate {
generatorName = 'java'
configFile = 'open-api-cfg.json'
}
{
"modelPackage" : "com.foo",
"serializableModel": "true",
"dateLibrary" : "java8",
"java8" : "true"
}
The Java generator should support single inheritance, plus an arbitrary number of composed models, as it did before. This allows a great deal of flexibility. For example, I have models representing "views" returned to clients consisting of a database record that extends a base model, plus fields composed from other models. The client need not know which fields came directly from the db record, and which are calculated on-the-fly and returned from other models.
Ref: minimal spec to reproduce the issue: https://gist.github.com/clintfoster/d60b4da3f7b1249bf8c765dfb202bbc0
Closing this issue for the time being.
Thank you! I will test with the next openapi-generator-gradle-plugin release, presumably 3.3.5.
Next release is 4.0.0 (tentatively scheduled on Jan 30th)
Confirmed fix in 4.0.0-beta2. Thank you!
One anomaly: The following console warning is still emitted, even though the additional inline schemas beyond the first are "composed" (not ignored), as expected:
More than one inline schema specified in allOf:. Only the first one is recognized. All others are ignored.
Confirmed fix in
4.0.0-beta2. Thank you!One anomaly: The following console warning is still emitted, even though the additional inline schemas beyond the first are "composed" (not ignored), as expected:
More than one inline schema specified in allOf:. Only the first one is recognized. All others are ignored.
Is there a way to avoid this warning? I use version 4.2.2
Most helpful comment
Next release is 4.0.0 (tentatively scheduled on Jan 30th)