-
-
Notifications
You must be signed in to change notification settings - Fork 7.1k
Description
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
When declaring a schema as a composition of classes using allOf, having the first element of the allOf (which is meant to be the main inherited class extended in my Java subclass) not being a reference to a pre-existing class, it is simply ignored by the generator.
openapi-generator version
Swagger-editor and openapi-codegen 4.1.0
OpenAPI declaration file content or url
schemas:
Example1:
type: object
properties:
Example1Property:
type: string
Example2:
allOf:
- type: object
properties:
Example2Property:
type: string
- $ref: '#/components/schemas/Example1'
The Swagger-editor generated Example2 class writes:
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaClientCodegen", date = "2019-08-01T11:15:04.683Z[GMT]")
public class Example2 implements Example1 {
@SerializedName("Example1Property")
private String example1Property = null;
public Example2 example1Property(String example1Property) {
this.example1Property = example1Property;
return this;
}
/**
* Get example1Property
* @return example1Property
**/
@Schema(description = "")
public String getExample1Property() {
return example1Property;
}
public void setExample1Property(String example1Property) {
this.example1Property = example1Property;
}
// all the usual methods...
The openapi-codegen generated Example2 class writes:
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaClientCodegen", date = "2019-08-02T09:54:03.694+02:00[Europe/Paris]")public class Example2 {
@JsonProperty("Example1Property")
private String example1Property = null;
public Example2 example1Property(String example1Property) {
this.example1Property = example1Property;
return this;
}
/**
* Get example1Property
* @return example1Property
**/
@Schema(description = "")
public String getExample1Property() {
return example1Property;
}
public void setExample1Property(String example1Property) {
this.example1Property = example1Property;
}
// all the usual methods...
Expected output would have been (from openapi-codegen):
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaClientCodegen", date = "2019-08-02T09:54:03.694+02:00[Europe/Paris]")public class Example2 {
@JsonProperty("Example2Property")
@JsonProperty("Example1Property")
private String example2Property = null;
private String example1Property = null;
// ...
Command line used for generation
"C:\Program Files\Java\jdk1.8.0_72\bin\java" -jar swagger-codegen-cli.jar generate -i myDefs.yml -l java --library resttemplate -DsupportJava6=true -DdateLibrary=legacy -o out2/myproject --api-package com.my.project.client.api --model-package com.my.project.client.model -DhideGenerationTimestamp=true -DdisableApiModelAnnotations=true
Suggest a fix
Having the same behaviour as when the non pre-existing class is set as more than the first occurrence in the allOf and is generated as an interface, that is copying the attributes of the non pre-existing class in the subclass.