Skip to content

Commit 7696559

Browse files
szakrewskywing328
authored andcommitted
Issue #2449 SubClass annotations are missing from the base class (#4085)
* petstore up to latest * Issue #2449 SubClass annotations are missing from the base class * include child in all its super types
1 parent 1968bea commit 7696559

File tree

10 files changed

+81
-5
lines changed

10 files changed

+81
-5
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenModel.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class CodegenModel {
1717
// References to parent and interface CodegenModels. Only set when code generator supports inheritance.
1818
public CodegenModel parentModel;
1919
public List<CodegenModel> interfaceModels;
20+
public List<CodegenModel> children;
2021

2122
public String name, classname, title, description, classVarName, modelJson, dataType;
2223
public String classFilename; // store the class file name, mainly used for import

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,18 @@ public Map<String, Object> postProcessAllModels(Map<String, Object> objs) {
180180
}
181181
}
182182
}
183+
// Let parent know about all its children
184+
for (String name : allModels.keySet()) {
185+
CodegenModel cm = allModels.get(name);
186+
CodegenModel parent = allModels.get(cm.parent);
187+
while (parent != null) {
188+
if (parent.children == null) {
189+
parent.children = new ArrayList<CodegenModel>();
190+
}
191+
parent.children.add(cm);
192+
parent = allModels.get(parent.parent);
193+
}
194+
}
183195
}
184196
return objs;
185197
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ public void processOpts() {
253253
importMapping.put("ApiModelProperty", "io.swagger.annotations.ApiModelProperty");
254254
importMapping.put("ApiModel", "io.swagger.annotations.ApiModel");
255255
importMapping.put("JsonProperty", "com.fasterxml.jackson.annotation.JsonProperty");
256+
importMapping.put("JsonSubTypes", "com.fasterxml.jackson.annotation.JsonSubTypes");
257+
importMapping.put("JsonTypeInfo", "com.fasterxml.jackson.annotation.JsonTypeInfo");
256258
importMapping.put("JsonCreator", "com.fasterxml.jackson.annotation.JsonCreator");
257259
importMapping.put("JsonValue", "com.fasterxml.jackson.annotation.JsonValue");
258260
importMapping.put("SerializedName", "com.google.gson.annotations.SerializedName");
@@ -628,6 +630,10 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
628630
if(codegenModel.description != null) {
629631
codegenModel.imports.add("ApiModel");
630632
}
633+
if (codegenModel.discriminator != null && additionalProperties.containsKey("jackson")) {
634+
codegenModel.imports.add("JsonSubTypes");
635+
codegenModel.imports.add("JsonTypeInfo");
636+
}
631637
if (allDefinitions != null && codegenModel.parentSchema != null && codegenModel.hasEnums) {
632638
final Model parentModel = allDefinitions.get(codegenModel.parentSchema);
633639
final CodegenModel parentCodegenModel = super.fromModel(codegenModel.parent, parentModel);

modules/swagger-codegen/src/main/resources/Java/pojo.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* {{#description}}{{.}}{{/description}}{{^description}}{{classname}}{{/description}}
33
*/{{#description}}
44
@ApiModel(description = "{{{description}}}"){{/description}}
5-
{{>generatedAnnotation}}
5+
{{>generatedAnnotation}}{{#discriminator}}{{>typeInfoAnnotation}}{{/discriminator}}
66
public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}}{{#parcelableModel}}implements Parcelable {{#serializableModel}}, Serializable {{/serializableModel}}{{/parcelableModel}}{{^parcelableModel}}{{#serializableModel}}implements Serializable {{/serializableModel}}{{/parcelableModel}}{
77
{{#vars}}
88
{{#isEnum}}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{{#jackson}}
2+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "{{discriminator}}" )
3+
@JsonSubTypes({
4+
{{#children}}@JsonSubTypes.Type(value = {{name}}.class, name = "{{name}}"),{{/children}}
5+
}){{/jackson}}

samples/client/petstore/java/feign/src/main/java/io/swagger/client/model/Animal.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
import java.util.Objects;
1717
import com.fasterxml.jackson.annotation.JsonProperty;
1818
import com.fasterxml.jackson.annotation.JsonCreator;
19+
import com.fasterxml.jackson.annotation.JsonSubTypes;
20+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1921
import io.swagger.annotations.ApiModel;
2022
import io.swagger.annotations.ApiModelProperty;
2123

2224
/**
2325
* Animal
2426
*/
25-
27+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className" )
28+
@JsonSubTypes({
29+
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),@JsonSubTypes.Type(value = Cat.class, name = "Cat"),
30+
})
2631
public class Animal {
2732
@JsonProperty("className")
2833
private String className = null;

samples/client/petstore/java/jersey1/src/main/java/io/swagger/client/model/Animal.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
import java.util.Objects;
1717
import com.fasterxml.jackson.annotation.JsonProperty;
1818
import com.fasterxml.jackson.annotation.JsonCreator;
19+
import com.fasterxml.jackson.annotation.JsonSubTypes;
20+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1921
import io.swagger.annotations.ApiModel;
2022
import io.swagger.annotations.ApiModelProperty;
2123

2224
/**
2325
* Animal
2426
*/
25-
27+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className" )
28+
@JsonSubTypes({
29+
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),@JsonSubTypes.Type(value = Cat.class, name = "Cat"),
30+
})
2631
public class Animal {
2732
@JsonProperty("className")
2833
private String className = null;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Swagger Petstore
3+
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
4+
*
5+
* OpenAPI spec version: 1.0.0
6+
* Contact: [email protected]
7+
*
8+
* NOTE: This class is auto generated by the swagger code generator program.
9+
* https://github.com/swagger-api/swagger-codegen.git
10+
* Do not edit the class manually.
11+
*/
12+
13+
package io.swagger.client;
14+
15+
import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
16+
import com.fasterxml.jackson.databind.util.ISO8601Utils;
17+
18+
import java.text.FieldPosition;
19+
import java.util.Date;
20+
21+
22+
public class RFC3339DateFormat extends ISO8601DateFormat {
23+
24+
// Same as ISO8601DateFormat but serializing milliseconds.
25+
@Override
26+
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
27+
String value = ISO8601Utils.format(date, true);
28+
toAppendTo.append(value);
29+
return toAppendTo;
30+
}
31+
32+
}

samples/client/petstore/java/jersey2-java8/src/main/java/io/swagger/client/model/Animal.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
import java.util.Objects;
1717
import com.fasterxml.jackson.annotation.JsonProperty;
1818
import com.fasterxml.jackson.annotation.JsonCreator;
19+
import com.fasterxml.jackson.annotation.JsonSubTypes;
20+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1921
import io.swagger.annotations.ApiModel;
2022
import io.swagger.annotations.ApiModelProperty;
2123

2224
/**
2325
* Animal
2426
*/
25-
27+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className" )
28+
@JsonSubTypes({
29+
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),@JsonSubTypes.Type(value = Cat.class, name = "Cat"),
30+
})
2631
public class Animal {
2732
@JsonProperty("className")
2833
private String className = null;

samples/client/petstore/java/jersey2/src/main/java/io/swagger/client/model/Animal.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
import java.util.Objects;
1717
import com.fasterxml.jackson.annotation.JsonProperty;
1818
import com.fasterxml.jackson.annotation.JsonCreator;
19+
import com.fasterxml.jackson.annotation.JsonSubTypes;
20+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1921
import io.swagger.annotations.ApiModel;
2022
import io.swagger.annotations.ApiModelProperty;
2123

2224
/**
2325
* Animal
2426
*/
25-
27+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "className" )
28+
@JsonSubTypes({
29+
@JsonSubTypes.Type(value = Dog.class, name = "Dog"),@JsonSubTypes.Type(value = Cat.class, name = "Cat"),
30+
})
2631
public class Animal {
2732
@JsonProperty("className")
2833
private String className = null;

0 commit comments

Comments
 (0)