Openapi-generator: [BUG][JAVA] Referencing Object with additionalProperties fails to compile with incorrect default value

Created on 13 Apr 2020  路  3Comments  路  Source: OpenAPITools/openapi-generator

Bug Report Checklist

  • [x] Have you provided a full/minimal spec to reproduce the issue?
  • [x] Have you validated the input using an OpenAPI validator (example)?
  • [x] What's the version of OpenAPI Generator used?
  • [x] Have you search for related issues/PRs?
  • [x] What's the actual output vs expected output?
  • [ ] [Optional] Bounty to sponsor the fix (example)
Description

Using the Java generator, the generated Model for an Object that references another Object that has "additionalProperties" fails to compile.
This is because the default value of the property is not correctly set, see in generated Bar.java:

private Foo foo = new HashMap<String, Object>();
openapi-generator version

4.3.0
Bug has already been reported for versions 4.0.0 to 4.0.3 in https://github.com/OpenAPITools/openapi-generator/issues/3456

OpenAPI declaration file content or url

https://gist.github.com/thomas-bc/549582b87073b8e02971fb623e30cabc
Snippet:

definitions:
  Foo:
    type: object
    properties:
      asdf:
        type: string
    additionalProperties:
      type: object
  Bar:
    type: object
    properties:
      foo:
        $ref: '#/definitions/Foo'
Command line used for generation

$ java -jar ./openapi-generator-cli-4.3.0.jar generate -g java -i ./swagger.yaml -o ./generated_example

Steps to reproduce
  1. Download openapi-generator-cli-4.3.0.jar and swagger.yaml file
  2. Generate using command mentioned above
  3. Try compiling generated Java code with ./gradlew assemble

This will throw a compiling error:

in /generated_example/src/main/java/org/openapitools/client/model/Bar.java:35: error: cannot find symbol
  private Foo foo = new HashMap<String, Object>();
                       ^
  symbol:   class HashMap
  location: class Bar
1 error
Expected generation

private Foo foo = new Foo();
or no default value:
private Foo foo;

Related issues/PRs

https://github.com/OpenAPITools/openapi-generator/issues/3456

Java Bug

Most helpful comment

I've opened #6052 to resolve this.

All 3 comments

馃憤 Thanks for opening this issue!
馃彿 I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.

Workaround is to post process the file:

find build/open-api-generated/src/main/java/ -type f -name "*.java" -exec sed -i 's/TypeContainingAdditionalProps foo = new HashMap<>/TypeContainingAdditionalProps foo = new TypeContainingAdditionalProps/g' {} \;

I've opened #6052 to resolve this.

Was this page helpful?
0 / 5 - 0 ratings