Openapi-generator: [Java] "allOf" no longer supports inheritance AND composition

Created on 31 Oct 2018  路  6Comments  路  Source: OpenAPITools/openapi-generator

Description

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.

Composition / Inheritance Bug

Most helpful comment

Next release is 4.0.0 (tentatively scheduled on Jan 30th)

All 6 comments

1360 has been merged into master. Please give it another try and let us know if it's still an issue.

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

Was this page helpful?
0 / 5 - 0 ratings