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] OneOf java classes not getting generated as part of codeGen in gradle plugin 4.0.0 #2906

Open
samarthgupta437 opened this issue May 16, 2019 · 23 comments

Comments

@samarthgupta437
Copy link

samarthgupta437 commented May 16, 2019

When I generate sever stub for spec having OneOf tags, the code generation gradle task is successful , but in the generated models package OneOf*.java classes are missing.

I am using org.openapitools:openapi-generator-gradle-plugin:4.0.0 for "jaxrs-jersey" generatorName.

For example for below YAML file class "OneOfSofa1Sofa2" is not getting generated , but it is referred for variable "sofaStyle" in generated class Home.java

I have attached the YML as txt
home.txt

Below gradle task was used:
openApiGenerate { generatorName = "jaxrs-jersey" inputSpec = "$rootDir/src/main/resources/home.yml".toString() outputDir = "$rootDir".toString() apiPackage = "com.home.rest.resources" invokerPackage = "com.home.rest" modelPackage = "com.home.rest.model" modelFilesConstrainedTo = [] configOptions = [ dateLibrary: "java8" ] }

Screenshot of how it looks in editor

Screen Shot 2019-05-16 at 10 26 17 AM

@judgej
Copy link

judgej commented May 28, 2019

OneOf classes also not being generated for the PHP client. The expected class name seems appropriate\ OneOfType1Type2Etc with each data type of reference name listed, but the classes are just not created.

I'm mentioning this in case it's a problem with the underlying spec parsing rather than the language generator.

This is in my spec for a response object property:

          "currentAuthorisation": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/simpleAuthorisation"
              },
              {
                "type": "string",
                "nullable": true,
                "description": "null if there is no current authorisation"
              }
            ]
          },

The class not being generated is OneOfSimpleAuthorisationString (OneOf + SimpleAuthorisation + String) though the deserialiser is expecting it when currentAuthorisation is not null.

@audricschiltknecht
Copy link

audricschiltknecht commented Jun 25, 2019

For Java, I'm hitting the same issues using both the CLI and the gradle plugin: Oneof classes are not generated.
Also the case for Python code, I'm guessing this is more of a general issue than a language-specific one.

@ChintanSK
Copy link

Facing the same problem with the java maven plugin: OneOf* classes are not generated, hence failing the compile task in the maven build.

@alfirin
Copy link

alfirin commented Sep 4, 2019

Same issue here.

@Frontrider
Copy link

Same here.

@wackykid
Copy link

wackykid commented Oct 3, 2019

so when is this going to be resolved? I am using the latest openapi-generator and I too get this issue. luckily I am doing the design of the API so I can redesign my API to NOT use oneOf to avoid this. but i will love very much to implement oneOf as some of my APIs are designed to return different object types depending on the input.

@giannisla
Copy link

do we know when is it going to be resolved?

@gigaga
Copy link

gigaga commented Oct 7, 2019

Same for me for generating Java server.

@Alex118
Copy link

Alex118 commented Oct 11, 2019

Same issue here. This is a critical blocker for using openapi generator in our project as we deal with polymorphic APIs.

Has anyone at least found a workaround for this?

@Frontrider
Copy link

A workaround is to create those classes manually.

@wackykid
Copy link

wackykid commented Nov 8, 2019

A workaround is to create those classes manually.

any examples on how these classes should look like..?

@Frontrider
Copy link

Depends on your setup. We just extend one of the classes that it generated as the parent of the ones we need, then implement all of the unique parts. That will look like the class we need.

@ghilainm
Copy link

ghilainm commented Nov 13, 2019

Same issue here using the spring-cloud generator 4.0.0. Any plan to fix this or do you believe it is not meant to be fixed?

Seems to be a duplicate of #634.

And as far as I have seen on this ticket everything related to one of should be in #15

@steeeve1510
Copy link

I'm having the same issue with the jaxrs-cxf generator. Currently we are using the version 3.3.4. There the OneOf... Class doesn't get rendered. Instead Object is used. This works for our use case.

@nickshoe
Copy link

Same issue with a JHipster API-first development project, which uses:
<openapi-generator-maven-plugin.version>4.1.3</openapi-generator-maven-plugin.version>

@dbaltor
Copy link

dbaltor commented Feb 6, 2020

It has seemingly fixed by this PR #5120

@bspies-work
Copy link

We are using the openapi-generator-gradle plugin to do the generation, and seeing this issue too with version 4.3.0. Tried the 5.0.0-beta version (released June 2020) and still seeing this issue, so either that merge didn't make it in to either version, or it is not fixed.

@karllosernnesto-vakt
Copy link

karllosernnesto-vakt commented Aug 31, 2020

Im having some issue... using openapi-generator-maven-plugin at 4.3.1 version. So do u have any updates regarding this issue?

The merge was really made?

@wing328
Copy link
Member

wing328 commented Aug 31, 2020

Currently, only java client (jersey2 library) generator has better support for oneOf and anyOf. Please give it a try to see if you've any feedback on the implementation.

@rj93
Copy link

rj93 commented Sep 22, 2020

@wing328 I have tried using the jersey2 library, but I it is complaining that it is unable to find symbol: class JsonTypeInfo and class JsonSubTypes. I have the dependency:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.11.2</version>
</dependency>

The generated OneOf class doesn't seem to be adding the imports for them:

import java.util.Objects;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import javax.validation.constraints.*;
import javax.validation.Valid;

@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2020-09-22T14:51:06.694+01:00[Europe/London]")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "", visible = true)
@JsonSubTypes({
})

public interface TransactionsAllOfTransactionsOneOf  {
}

Any ideas?

@Frontrider
Copy link

I think we also had some import problems, but I'm not sure, as I'm not the one directly working with these.

@thSoft
Copy link
Contributor

thSoft commented Jan 9, 2021

A (not type-safe) workaround is to enumerate the class names generated from oneOf types in the following command line switches when running the generator:
--language-specific-primitives=OneOfTypeATypeB,OneOfTypeCTypeD --type-mappings=OneOfTypeATypeB=java.lang.Object,OneOfTypeCTypeD=java.lang.Object

@sann3
Copy link

sann3 commented Aug 26, 2024

In 7.8.0, it is generating both classes for OneOf, means this is fixed ?

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.