[Java] Enable discriminator recursive lookup (#5895)

* Adds addComposedMappedModels and testComposedSchemaOneOfDiscriminatorMap

* Requires that discriminators be required properties

* Strengthens discriminaotr validation, adds better error messages, adds schema oneof samples

* Adds oneOf and anyOf invalidDiscriminator tests

* Updates incorrect addOneOfInterfaceModel invocation

* Runs ensure-up-to-date

* Adds updates from Sebastien Rosset

* Removes newlines

* Uses df.isString

* Fixes tests be correctly setting df.isString

* Updates discriminatorExplicitMappingVerbose description per PR feedback

* Adds description of how mappedModels is populated

* enable discriminator lookup

* Adds the suggestion exception raising when a MappedModel mappingName is null

* Actually resolves merge conflicts

* Adds addComposedMappedModels and testComposedSchemaOneOfDiscriminatorMap

* Requires that discriminators be required properties

* Strengthens discriminaotr validation, adds better error messages, adds schema oneof samples

* Adds oneOf and anyOf invalidDiscriminator tests

* Updates incorrect addOneOfInterfaceModel invocation

* Runs ensure-up-to-date

* Adds updates from Sebastien Rosset

* Removes newlines

* Uses df.isString

* Fixes tests be correctly setting df.isString

* Updates discriminatorExplicitMappingVerbose description per PR feedback

* Adds description of how mappedModels is populated

* Adds the suggestion exception raising when a MappedModel mappingName is null

* Actually resolves merge conflicts

* Switches two methods to package private because they are needed for testing

* Allow nulls in MappedModel.getMappingName

* Address Jim Schubert review comments

* Updates CLI flag name to legacyDiscriminatorBehavior, default=true

* Change discriminator CLI option. Remove exception when mappingName is null value

* resolve merge conflicts

* Execute scripts under bin directory

Co-authored-by: Justin Black <justin.a.black@gmail.com>
Co-authored-by: William Cheng <wing328hk@gmail.com>
This commit is contained in:
Sebastien Rosset
2020-05-12 10:02:55 -07:00
committed by GitHub
parent f8be3926f4
commit 6c5621d97e
107 changed files with 735 additions and 46 deletions

View File

@@ -56,13 +56,41 @@ public class JSON {
@Override
public Class getClassForElement(JsonElement readElement) {
Map<String, Class> classByDiscriminatorValue = new HashMap<String, Class>();
classByDiscriminatorValue.put("Dog", Dog.class);
classByDiscriminatorValue.put("Cat", Cat.class);
classByDiscriminatorValue.put("BigCat", BigCat.class);
classByDiscriminatorValue.put("Cat", Cat.class);
classByDiscriminatorValue.put("Dog", Dog.class);
classByDiscriminatorValue.put("Animal", Animal.class);
return getClassByDiscriminator(classByDiscriminatorValue,
getDiscriminatorValue(readElement, "className"));
}
})
.registerTypeSelector(BigCat.class, new TypeSelector() {
@Override
public Class getClassForElement(JsonElement readElement) {
Map<String, Class> classByDiscriminatorValue = new HashMap<String, Class>();
classByDiscriminatorValue.put("BigCat", BigCat.class);
return getClassByDiscriminator(classByDiscriminatorValue,
getDiscriminatorValue(readElement, "className"));
}
})
.registerTypeSelector(Cat.class, new TypeSelector() {
@Override
public Class getClassForElement(JsonElement readElement) {
Map<String, Class> classByDiscriminatorValue = new HashMap<String, Class>();
classByDiscriminatorValue.put("BigCat", BigCat.class);
classByDiscriminatorValue.put("Cat", Cat.class);
return getClassByDiscriminator(classByDiscriminatorValue,
getDiscriminatorValue(readElement, "className"));
}
})
.registerTypeSelector(Dog.class, new TypeSelector() {
@Override
public Class getClassForElement(JsonElement readElement) {
Map<String, Class> classByDiscriminatorValue = new HashMap<String, Class>();
classByDiscriminatorValue.put("Dog", Dog.class);
return getClassByDiscriminator(classByDiscriminatorValue,
getDiscriminatorValue(readElement, "className"));
}
})
;
GsonBuilder builder = fireBuilder.createGsonBuilder();

View File

@@ -23,6 +23,9 @@ import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import org.openapitools.client.model.BigCat;
import org.openapitools.client.model.Cat;
import org.openapitools.client.model.Dog;
/**
* Animal

View File

@@ -30,6 +30,7 @@ import org.openapitools.client.model.Cat;
* BigCat
*/
public class BigCat extends Cat {
/**
* Gets or Sets kind
@@ -86,6 +87,9 @@ public class BigCat extends Cat {
@SerializedName(SERIALIZED_NAME_KIND)
private KindEnum kind;
public BigCat() {
this.className = this.getClass().getSimpleName();
}
public BigCat kind(KindEnum kind) {

View File

@@ -24,17 +24,22 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import org.openapitools.client.model.Animal;
import org.openapitools.client.model.BigCat;
import org.openapitools.client.model.CatAllOf;
/**
* Cat
*/
public class Cat extends Animal {
public static final String SERIALIZED_NAME_DECLAWED = "declawed";
@SerializedName(SERIALIZED_NAME_DECLAWED)
private Boolean declawed;
public Cat() {
this.className = this.getClass().getSimpleName();
}
public Cat declawed(Boolean declawed) {

View File

@@ -30,11 +30,15 @@ import org.openapitools.client.model.DogAllOf;
* Dog
*/
public class Dog extends Animal {
public static final String SERIALIZED_NAME_BREED = "breed";
@SerializedName(SERIALIZED_NAME_BREED)
private String breed;
public Dog() {
this.className = this.getClass().getSimpleName();
}
public Dog breed(String breed) {