Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG][JAVA] Referencing Object with additionalProperties fails to compile with incorrect default value #5920

Closed
5 of 6 tasks
thomas-bc opened this issue Apr 13, 2020 · 3 comments · Fixed by #6052
Closed
5 of 6 tasks

Comments

@thomas-bc
Copy link

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used?
  • Have you search for related issues/PRs?
  • 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 #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

#3456

@auto-labeler
Copy link

auto-labeler bot commented Apr 13, 2020

👍 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.

@gravelld
Copy link

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' {} \;

@jimschubert
Copy link
Member

I've opened #6052 to resolve this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants