Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Merge requests
  • !4785

[Java][client] oneof support for jackson clients

  • Review changes

  • Download
  • Email patches
  • Plain diff
Closed Administrator requested to merge github/fork/bkabrda/java-client-oneof-support into master Dec 13, 2019
  • Overview 0
  • Commits 7
  • Pipelines 0
  • Changes 69

Created by: bkabrda

This PR represents implementation of oneOf support for Java clients that use Jackson as serialization library. I based this on discussion in #15.

This implements oneOf in the following way:

  • The object/property that holds oneOf mapping is generated as an interface with proper jackson JsonSubTypes decorator derived from discriminator - this makes it possible for jackson to detect the implementing class that should be used when deserializing.
  • The objects referenced in oneOf implement this interface.
  • A getter for the discriminator attribute is generated in the above mentioned interface, making it easy to write code such as (assuming the API response contains x, which is the oneOf interface):if (x.getType() == "type1") { Type1 type1 = (Type1) x };
  • If there are any additional properties defined on the oneOf-containing object, they are added to all of the oneOf members.

Limitations:

  • Doesn't work with inline-defined (non-ref) members of oneOf.
  • Doesn't work if discriminator is not used (more specifically, it won't be able to deserialize API responses, as the JsonSubTypes decorator on the interface will be empty).
  • Currently it is assumed that the discriminator property has string type (this could probably be fixed).

I'll appreciate any feedback on this and will be happy to implement more improvements if someone has suggestions.

PR checklist

  • Read the contribution guidelines.
  • If contributing template-only or documentation-only changes which will change sample output, build the project before.
  • Run the shell script(s) under ./bin/ (or Windows batch scripts under.\bin\windows) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run ./bin/{LANG}-petstore.sh, ./bin/openapi3/{LANG}-petstore.sh if updating the code or mustache templates for a language ({LANG}) (e.g. php, ruby, python, etc).
  • File the PR against the correct branch: master, 4.3.x, 5.0.x. Default: master.
  • Copy the technical committee to review the pull request if your PR is targeting a particular programming language.

@bbdouglas (2017/07) @sreeshas (2017/08) @jfiala (2017/08) @lukoyanov (2017/09) @cbornet (2017/09) @jeff9finger (2018/01) @karismann (2019/03) @Zomzog (2019/04) @lwlee2608 (2019/10)

Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: github/fork/bkabrda/java-client-oneof-support