[Java] "allOf" no longer supports inheritance AND composition
See original GitHub issueDescription
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.)
openapi-generator version
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.
OpenAPI declaration file
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
Command line used for generation
build.gradle excerpt
openApiGenerate {
generatorName = 'java'
configFile = 'open-api-cfg.json'
}
config file
{
"modelPackage" : "com.foo",
"serializableModel": "true",
"dateLibrary" : "java8",
"java8" : "true"
}
Suggest a fix/enhancement
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.
Issue Analytics
- State:
- Created 5 years ago
- Comments:6 (3 by maintainers)
Top Related StackOverflow Question
Next release is 4.0.0 (tentatively scheduled on Jan 30th)
Is there a way to avoid this warning? I use version 4.2.2