Adds getAdditionalPropertiesIsAnyType to java schema classes (#8908)

* Adds getter and setter for AdditionalPropertiesIsAnyType in IJsonSchemaValidationProperties

* Removes venv

* Implements getter and setter in CodegenModel

* Implements getter and setter in CodegenProperty

* Implements getter and setter in CodegenParameter

* Adds getter and setter in CodegenResponse

* Creates setAddProps

* Removes comment

* Adds setAdditionalPropertiesIsAnyType invocations

* Updates samples

* Updates tests in testAdditionalPropertiesPresentInResponses

* Updates tests in testAdditionalPropertiesPresentInParameters

* Updates testAdditionalPropertiesPresentInModelProperties to check getAdditionalPropertiesIsAnyType

* Updates testAdditionalPropertiesPresentInModels
This commit is contained in:
Justin Black 2021-03-07 09:42:47 -08:00 committed by GitHub
parent 51a19e1c27
commit 101da6e434
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 137 additions and 51 deletions

View File

@ -65,6 +65,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
public String arrayModelType; public String arrayModelType;
public boolean isAlias; // Is this effectively an alias of another simple type public boolean isAlias; // Is this effectively an alias of another simple type
public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate, isDateTime; public boolean isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble, isDate, isDateTime;
private boolean additionalPropertiesIsAnyType;
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties) public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
public List<CodegenProperty> allVars = new ArrayList<CodegenProperty>(); // all properties (with parent's properties) public List<CodegenProperty> allVars = new ArrayList<CodegenProperty>(); // all properties (with parent's properties)
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>(); // a list of required properties public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>(); // a list of required properties
@ -712,6 +713,16 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
this.isNull = isNull; this.isNull = isNull;
} }
@Override
public boolean getAdditionalPropertiesIsAnyType() {
return additionalPropertiesIsAnyType;
}
@Override
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
@ -742,6 +753,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
hasOnlyReadOnly == that.hasOnlyReadOnly && hasOnlyReadOnly == that.hasOnlyReadOnly &&
isNull == that.isNull && isNull == that.isNull &&
hasValidation == that.hasValidation && hasValidation == that.hasValidation &&
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
getUniqueItems() == that.getUniqueItems() && getUniqueItems() == that.getUniqueItems() &&
getExclusiveMinimum() == that.getExclusiveMinimum() && getExclusiveMinimum() == that.getExclusiveMinimum() &&
getExclusiveMaximum() == that.getExclusiveMaximum() && getExclusiveMaximum() == that.getExclusiveMaximum() &&
@ -813,7 +825,8 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
hasChildren, isMap, isDeprecated, hasOnlyReadOnly, getExternalDocumentation(), getVendorExtensions(), hasChildren, isMap, isDeprecated, hasOnlyReadOnly, getExternalDocumentation(), getVendorExtensions(),
getAdditionalPropertiesType(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(), getAdditionalPropertiesType(), getMaxProperties(), getMinProperties(), getUniqueItems(), getMaxItems(),
getMinItems(), getMaxLength(), getMinLength(), getExclusiveMinimum(), getExclusiveMaximum(), getMinimum(), getMinItems(), getMaxLength(), getMinLength(), getExclusiveMinimum(), getExclusiveMaximum(), getMinimum(),
getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel()); getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel(),
getAdditionalPropertiesIsAnyType());
} }
@Override @Override
@ -899,6 +912,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
sb.append(", isModel='").append(isModel).append('\''); sb.append(", isModel='").append(isModel).append('\'');
sb.append(", isNull='").append(isNull); sb.append(", isNull='").append(isNull);
sb.append(", hasValidation='").append(hasValidation); sb.append(", hasValidation='").append(hasValidation);
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
sb.append('}'); sb.append('}');
return sb.toString(); return sb.toString();
} }

View File

@ -39,6 +39,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
public boolean isArray, isMap; public boolean isArray, isMap;
public boolean isFile; public boolean isFile;
public boolean isEnum; public boolean isEnum;
private boolean additionalPropertiesIsAnyType;
public List<String> _enum; public List<String> _enum;
public Map<String, Object> allowableValues; public Map<String, Object> allowableValues;
public CodegenProperty items; public CodegenProperty items;
@ -149,6 +150,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
output.pattern = this.pattern; output.pattern = this.pattern;
output.additionalProperties = this.additionalProperties; output.additionalProperties = this.additionalProperties;
output.isNull = this.isNull; output.isNull = this.isNull;
output.setAdditionalPropertiesIsAnyType(this.getAdditionalPropertiesIsAnyType());
if (this._enum != null) { if (this._enum != null) {
output._enum = new ArrayList<String>(this._enum); output._enum = new ArrayList<String>(this._enum);
@ -203,7 +205,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, isDeepObject, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull); return Objects.hash(isFormParam, isQueryParam, isPathParam, isHeaderParam, isCookieParam, isBodyParam, isContainer, isCollectionFormatMulti, isPrimitiveType, isModel, isExplode, baseName, paramName, dataType, datatypeWithEnum, dataFormat, collectionFormat, description, unescapedDescription, baseType, defaultValue, enumName, style, isDeepObject, example, jsonSchema, isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBinary, isBoolean, isDate, isDateTime, isUuid, isUri, isEmail, isFreeFormObject, isAnyType, isArray, isMap, isFile, isEnum, _enum, allowableValues, items, mostInnerItems, additionalProperties, vars, requiredVars, vendorExtensions, hasValidation, getMaxProperties(), getMinProperties(), isNullable, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, getAdditionalPropertiesIsAnyType());
} }
@Override @Override
@ -248,6 +250,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
isNullable == that.isNullable && isNullable == that.isNullable &&
required == that.required && required == that.required &&
isNull == that.isNull && isNull == that.isNull &&
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
getExclusiveMaximum() == that.getExclusiveMaximum() && getExclusiveMaximum() == that.getExclusiveMaximum() &&
getExclusiveMinimum() == that.getExclusiveMinimum() && getExclusiveMinimum() == that.getExclusiveMinimum() &&
getUniqueItems() == that.getUniqueItems() && getUniqueItems() == that.getUniqueItems() &&
@ -364,6 +367,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
sb.append(", contentType=").append(contentType); sb.append(", contentType=").append(contentType);
sb.append(", multipleOf=").append(multipleOf); sb.append(", multipleOf=").append(multipleOf);
sb.append(", isNull=").append(isNull); sb.append(", isNull=").append(isNull);
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
sb.append('}'); sb.append('}');
return sb.toString(); return sb.toString();
} }
@ -591,5 +595,15 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
@Override @Override
public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; } public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; }
@Override
public boolean getAdditionalPropertiesIsAnyType() {
return additionalPropertiesIsAnyType;
}
@Override
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
}
} }

View File

@ -185,6 +185,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
public String xmlName; public String xmlName;
public String xmlNamespace; public String xmlNamespace;
public boolean isXmlWrapped = false; public boolean isXmlWrapped = false;
private boolean additionalPropertiesIsAnyType;
public String getBaseName() { public String getBaseName() {
return baseName; return baseName;
@ -693,6 +694,16 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
@Override @Override
public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; } public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; }
@Override
public boolean getAdditionalPropertiesIsAnyType() {
return additionalPropertiesIsAnyType;
}
@Override
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
}
@Override @Override
public String toString() { public String toString() {
final StringBuilder sb = new StringBuilder("CodegenProperty{"); final StringBuilder sb = new StringBuilder("CodegenProperty{");
@ -782,6 +793,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
sb.append(", xmlNamespace='").append(xmlNamespace).append('\''); sb.append(", xmlNamespace='").append(xmlNamespace).append('\'');
sb.append(", isXmlWrapped=").append(isXmlWrapped); sb.append(", isXmlWrapped=").append(isXmlWrapped);
sb.append(", isNull=").append(isNull); sb.append(", isNull=").append(isNull);
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
sb.append('}'); sb.append('}');
return sb.toString(); return sb.toString();
} }
@ -831,6 +843,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
isXmlAttribute == that.isXmlAttribute && isXmlAttribute == that.isXmlAttribute &&
isXmlWrapped == that.isXmlWrapped && isXmlWrapped == that.isXmlWrapped &&
isNull == that.isNull && isNull == that.isNull &&
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
Objects.equals(openApiType, that.openApiType) && Objects.equals(openApiType, that.openApiType) &&
Objects.equals(baseName, that.baseName) && Objects.equals(baseName, that.baseName) &&
Objects.equals(complexType, that.complexType) && Objects.equals(complexType, that.complexType) &&
@ -892,6 +905,6 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
items, mostInnerItems, additionalProperties, vars, requiredVars, items, mostInnerItems, additionalProperties, vars, requiredVars,
vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase, vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase,
nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName, nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName,
xmlNamespace, isXmlWrapped, isNull); xmlNamespace, isXmlWrapped, isNull, getAdditionalPropertiesIsAnyType());
} }
} }

View File

@ -79,6 +79,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties) public List<CodegenProperty> vars = new ArrayList<CodegenProperty>(); // all properties (without parent's properties)
public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>(); public List<CodegenProperty> requiredVars = new ArrayList<CodegenProperty>();
private boolean hasValidation; private boolean hasValidation;
private boolean additionalPropertiesIsAnyType;
@Override @Override
public int hashCode() { public int hashCode() {
@ -89,7 +90,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
vars, requiredVars, isNull, hasValidation, vars, requiredVars, isNull, hasValidation,
getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(), getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(),
getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(), getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(),
is1xx, is2xx, is3xx, is4xx, is5xx); is1xx, is2xx, is3xx, is4xx, is5xx, getAdditionalPropertiesIsAnyType());
} }
@Override @Override
@ -131,6 +132,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
is3xx == that.is3xx && is3xx == that.is3xx &&
is4xx == that.is4xx && is4xx == that.is4xx &&
is5xx == that.is5xx && is5xx == that.is5xx &&
getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() &&
Objects.equals(vars, that.vars) && Objects.equals(vars, that.vars) &&
Objects.equals(requiredVars, that.requiredVars) && Objects.equals(requiredVars, that.requiredVars) &&
Objects.equals(headers, that.headers) && Objects.equals(headers, that.headers) &&
@ -429,6 +431,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
sb.append(", requiredVars='").append(requiredVars).append('\''); sb.append(", requiredVars='").append(requiredVars).append('\'');
sb.append(", isNull='").append(isNull); sb.append(", isNull='").append(isNull);
sb.append(", hasValidation='").append(hasValidation); sb.append(", hasValidation='").append(hasValidation);
sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType());
sb.append('}'); sb.append('}');
return sb.toString(); return sb.toString();
} }
@ -465,4 +468,14 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
@Override @Override
public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; } public void setHasValidation(boolean hasValidation) { this.hasValidation = hasValidation; }
@Override
public boolean getAdditionalPropertiesIsAnyType() {
return additionalPropertiesIsAnyType;
}
@Override
public void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType) {
this.additionalPropertiesIsAnyType = additionalPropertiesIsAnyType;
}
} }

View File

@ -2579,27 +2579,7 @@ public class DefaultCodegen implements CodegenConfig {
} }
// process 'additionalProperties' // process 'additionalProperties'
if (schema.getAdditionalProperties() == null) { setAddProps(schema, m);
if (disallowAdditionalPropertiesIfNotPresent) {
m.isAdditionalPropertiesTrue = false;
} else {
m.isAdditionalPropertiesTrue = true;
CodegenProperty cp = fromProperty("", new Schema());
m.setAdditionalProperties(cp);
}
} else if (schema.getAdditionalProperties() instanceof Boolean) {
if (Boolean.TRUE.equals(schema.getAdditionalProperties())) {
m.isAdditionalPropertiesTrue = true;
CodegenProperty cp = fromProperty("", new Schema());
m.setAdditionalProperties(cp);
} else {
m.isAdditionalPropertiesTrue = false;
}
} else {
m.isAdditionalPropertiesTrue = false;
CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties());
m.setAdditionalProperties(cp);
}
// post process model properties // post process model properties
if (m.vars != null) { if (m.vars != null) {
@ -2616,15 +2596,48 @@ public class DefaultCodegen implements CodegenConfig {
return m; return m;
} }
/** private void setAddProps(Schema schema, IJsonSchemaValidationProperties property){
* Recursively look in Schema sc for the discriminator discPropName CodegenModel m = null;
* and return a CodegenProperty with the dataType and required params set if (property instanceof CodegenModel) {
* the returned CodegenProperty may not be required and it may not be of type string m = (CodegenModel) property;
* }
* @param composedSchemaName The name of the sc Schema boolean isAdditionalPropertiesTrue = false;
* @param sc The Schema that may contain the discriminator if (schema.getAdditionalProperties() == null) {
* @param discPropName The String that is the discriminator propertyName in the schema if (!disallowAdditionalPropertiesIfNotPresent) {
*/ isAdditionalPropertiesTrue = true;
CodegenProperty cp = fromProperty("", new Schema());
property.setAdditionalProperties(cp);
property.setAdditionalPropertiesIsAnyType(true);
}
} else if (schema.getAdditionalProperties() instanceof Boolean) {
if (Boolean.TRUE.equals(schema.getAdditionalProperties())) {
isAdditionalPropertiesTrue = true;
CodegenProperty cp = fromProperty("", new Schema());
property.setAdditionalProperties(cp);
property.setAdditionalPropertiesIsAnyType(true);
}
} else {
CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties());
property.setAdditionalProperties(cp);
if (isAnyTypeSchema((Schema) schema.getAdditionalProperties())) {
property.setAdditionalPropertiesIsAnyType(true);
}
}
if (m != null && isAdditionalPropertiesTrue) {
m.isAdditionalPropertiesTrue = true;
}
}
/**
* Recursively look in Schema sc for the discriminator discPropName
* and return a CodegenProperty with the dataType and required params set
* the returned CodegenProperty may not be required and it may not be of type string
*
* @param composedSchemaName The name of the sc Schema
* @param sc The Schema that may contain the discriminator
* @param discPropName The String that is the discriminator propertyName in the schema
*/
private CodegenProperty discriminatorFound(String composedSchemaName, Schema sc, String discPropName, OpenAPI openAPI) { private CodegenProperty discriminatorFound(String composedSchemaName, Schema sc, String discPropName, OpenAPI openAPI) {
Schema refSchema = ModelUtils.getReferencedSchema(openAPI, sc); Schema refSchema = ModelUtils.getReferencedSchema(openAPI, sc);
if (refSchema.getProperties() != null && refSchema.getProperties().get(discPropName) != null) { if (refSchema.getProperties() != null && refSchema.getProperties().get(discPropName) != null) {
@ -6134,20 +6147,7 @@ public class DefaultCodegen implements CodegenConfig {
.filter(p -> Boolean.TRUE.equals(p.required)).collect(Collectors.toList()); .filter(p -> Boolean.TRUE.equals(p.required)).collect(Collectors.toList());
property.setRequiredVars(requireCpVars); property.setRequiredVars(requireCpVars);
} }
if (schema.getAdditionalProperties() == null) { setAddProps(schema, property);
if (!disallowAdditionalPropertiesIfNotPresent) {
CodegenProperty cp = fromProperty("", new Schema());
property.setAdditionalProperties(cp);
}
} else if (schema.getAdditionalProperties() instanceof Boolean) {
if (Boolean.TRUE.equals(schema.getAdditionalProperties())) {
CodegenProperty cp = fromProperty("", new Schema());
property.setAdditionalProperties(cp);
}
} else {
CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties());
property.setAdditionalProperties(cp);
}
} }
private void addJsonSchemaForBodyRequestInCaseItsNotPresent(CodegenParameter codegenParameter, RequestBody body) { private void addJsonSchemaForBodyRequestInCaseItsNotPresent(CodegenParameter codegenParameter, RequestBody body) {

View File

@ -98,4 +98,8 @@ public interface IJsonSchemaValidationProperties {
boolean getHasValidation(); boolean getHasValidation();
void setHasValidation(boolean hasValidation); void setHasValidation(boolean hasValidation);
boolean getAdditionalPropertiesIsAnyType();
void setAdditionalPropertiesIsAnyType(boolean additionalPropertiesIsAnyType);
} }

View File

@ -2365,22 +2365,26 @@ public class DefaultCodegenTest {
sc = openAPI.getComponents().getSchemas().get(modelName); sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc); cm = codegen.fromModel(modelName, sc);
assertEquals(cm.getAdditionalProperties(), anyTypeSchema); assertEquals(cm.getAdditionalProperties(), anyTypeSchema);
assertEquals(cm.getAdditionalPropertiesIsAnyType(), true);
modelName = "AdditionalPropertiesTrue"; modelName = "AdditionalPropertiesTrue";
sc = openAPI.getComponents().getSchemas().get(modelName); sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc); cm = codegen.fromModel(modelName, sc);
assertEquals(cm.getAdditionalProperties(), anyTypeSchema); assertEquals(cm.getAdditionalProperties(), anyTypeSchema);
assertEquals(cm.getAdditionalPropertiesIsAnyType(), true);
modelName = "AdditionalPropertiesFalse"; modelName = "AdditionalPropertiesFalse";
sc = openAPI.getComponents().getSchemas().get(modelName); sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc); cm = codegen.fromModel(modelName, sc);
assertEquals(cm.getAdditionalProperties(), null); assertEquals(cm.getAdditionalProperties(), null);
assertEquals(cm.getAdditionalPropertiesIsAnyType(), false);
modelName = "AdditionalPropertiesSchema"; modelName = "AdditionalPropertiesSchema";
sc = openAPI.getComponents().getSchemas().get(modelName); sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc); cm = codegen.fromModel(modelName, sc);
CodegenProperty stringCp = codegen.fromProperty("", new Schema().type("string")); CodegenProperty stringCp = codegen.fromProperty("", new Schema().type("string"));
assertEquals(cm.getAdditionalProperties(), stringCp); assertEquals(cm.getAdditionalProperties(), stringCp);
assertEquals(cm.getAdditionalPropertiesIsAnyType(), false);
} }
@Test @Test
@ -2411,24 +2415,32 @@ public class DefaultCodegenTest {
cm = codegen.fromModel(modelName, sc); cm = codegen.fromModel(modelName, sc);
mapWithAddPropsUnset = cm.getVars().get(0); mapWithAddPropsUnset = cm.getVars().get(0);
assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsUnset.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsTrue = cm.getVars().get(1); mapWithAddPropsTrue = cm.getVars().get(1);
assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsTrue.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsFalse = cm.getVars().get(2); mapWithAddPropsFalse = cm.getVars().get(2);
assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null); assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null);
assertEquals(mapWithAddPropsFalse.getAdditionalPropertiesIsAnyType(), false);
mapWithAddPropsSchema = cm.getVars().get(3); mapWithAddPropsSchema = cm.getVars().get(3);
assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp); assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp);
assertEquals(mapWithAddPropsSchema.getAdditionalPropertiesIsAnyType(), false);
modelName = "ObjectModelWithAddPropsInProps"; modelName = "ObjectModelWithAddPropsInProps";
sc = openAPI.getComponents().getSchemas().get(modelName); sc = openAPI.getComponents().getSchemas().get(modelName);
cm = codegen.fromModel(modelName, sc); cm = codegen.fromModel(modelName, sc);
mapWithAddPropsUnset = cm.getVars().get(0); mapWithAddPropsUnset = cm.getVars().get(0);
assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsUnset.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsTrue = cm.getVars().get(1); mapWithAddPropsTrue = cm.getVars().get(1);
assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsTrue.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsFalse = cm.getVars().get(2); mapWithAddPropsFalse = cm.getVars().get(2);
assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null); assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null);
assertEquals(mapWithAddPropsFalse.getAdditionalPropertiesIsAnyType(), false);
mapWithAddPropsSchema = cm.getVars().get(3); mapWithAddPropsSchema = cm.getVars().get(3);
assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp); assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp);
assertEquals(mapWithAddPropsSchema.getAdditionalPropertiesIsAnyType(), false);
if (isGenerateAliasAsModel) { // restore the setting if (isGenerateAliasAsModel) { // restore the setting
GlobalSettings.setProperty("generateAliasAsModel", "true"); GlobalSettings.setProperty("generateAliasAsModel", "true");
@ -2464,24 +2476,32 @@ public class DefaultCodegenTest {
co = codegen.fromOperation(path, "POST", operation, null); co = codegen.fromOperation(path, "POST", operation, null);
mapWithAddPropsUnset = co.queryParams.get(0); mapWithAddPropsUnset = co.queryParams.get(0);
assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsUnset.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsTrue = co.queryParams.get(1); mapWithAddPropsTrue = co.queryParams.get(1);
assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsTrue.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsFalse = co.queryParams.get(2); mapWithAddPropsFalse = co.queryParams.get(2);
assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null); assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null);
assertEquals(mapWithAddPropsFalse.getAdditionalPropertiesIsAnyType(), false);
mapWithAddPropsSchema = co.queryParams.get(3); mapWithAddPropsSchema = co.queryParams.get(3);
assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp); assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp);
assertEquals(mapWithAddPropsSchema.getAdditionalPropertiesIsAnyType(), false);
path = "/additional_properties/"; path = "/additional_properties/";
operation = openAPI.getPaths().get(path).getPost(); operation = openAPI.getPaths().get(path).getPost();
co = codegen.fromOperation(path, "POST", operation, null); co = codegen.fromOperation(path, "POST", operation, null);
mapWithAddPropsUnset = co.queryParams.get(0); mapWithAddPropsUnset = co.queryParams.get(0);
assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsUnset.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsTrue = co.queryParams.get(1); mapWithAddPropsTrue = co.queryParams.get(1);
assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsTrue.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsFalse = co.queryParams.get(2); mapWithAddPropsFalse = co.queryParams.get(2);
assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null); assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null);
assertEquals(mapWithAddPropsFalse.getAdditionalPropertiesIsAnyType(), false);
mapWithAddPropsSchema = co.queryParams.get(3); mapWithAddPropsSchema = co.queryParams.get(3);
assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp); assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp);
assertEquals(mapWithAddPropsSchema.getAdditionalPropertiesIsAnyType(), false);
if (isGenerateAliasAsModel) { // restore the setting if (isGenerateAliasAsModel) { // restore the setting
GlobalSettings.setProperty("generateAliasAsModel", "true"); GlobalSettings.setProperty("generateAliasAsModel", "true");
@ -2517,24 +2537,32 @@ public class DefaultCodegenTest {
co = codegen.fromOperation(path, "POST", operation, null); co = codegen.fromOperation(path, "POST", operation, null);
mapWithAddPropsUnset = co.responses.get(0); mapWithAddPropsUnset = co.responses.get(0);
assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsUnset.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsTrue = co.responses.get(1); mapWithAddPropsTrue = co.responses.get(1);
assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsTrue.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsFalse = co.responses.get(2); mapWithAddPropsFalse = co.responses.get(2);
assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null); assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null);
assertEquals(mapWithAddPropsFalse.getAdditionalPropertiesIsAnyType(), false);
mapWithAddPropsSchema = co.responses.get(3); mapWithAddPropsSchema = co.responses.get(3);
assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp); assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp);
assertEquals(mapWithAddPropsSchema.getAdditionalPropertiesIsAnyType(), false);
path = "/additional_properties/"; path = "/additional_properties/";
operation = openAPI.getPaths().get(path).getPost(); operation = openAPI.getPaths().get(path).getPost();
co = codegen.fromOperation(path, "POST", operation, null); co = codegen.fromOperation(path, "POST", operation, null);
mapWithAddPropsUnset = co.responses.get(0); mapWithAddPropsUnset = co.responses.get(0);
assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsUnset.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsUnset.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsTrue = co.responses.get(1); mapWithAddPropsTrue = co.responses.get(1);
assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema); assertEquals(mapWithAddPropsTrue.getAdditionalProperties(), anyTypeSchema);
assertEquals(mapWithAddPropsTrue.getAdditionalPropertiesIsAnyType(), true);
mapWithAddPropsFalse = co.responses.get(2); mapWithAddPropsFalse = co.responses.get(2);
assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null); assertEquals(mapWithAddPropsFalse.getAdditionalProperties(), null);
assertEquals(mapWithAddPropsFalse.getAdditionalPropertiesIsAnyType(), false);
mapWithAddPropsSchema = co.responses.get(3); mapWithAddPropsSchema = co.responses.get(3);
assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp); assertEquals(mapWithAddPropsSchema.getAdditionalProperties(), stringCp);
assertEquals(mapWithAddPropsSchema.getAdditionalPropertiesIsAnyType(), false);
if (isGenerateAliasAsModel) { // restore the setting if (isGenerateAliasAsModel) { // restore the setting
GlobalSettings.setProperty("generateAliasAsModel", "true"); GlobalSettings.setProperty("generateAliasAsModel", "true");

View File

@ -541,10 +541,10 @@ public interface PathHandlerInterface {
* <p><b>Response headers</b>: [CodegenProperty{openApiType='integer', baseName='X-Rate-Limit', complexType='null', getter='getxRateLimit', setter='setxRateLimit', description='calls per hour allowed by the user', dataType='Integer', datatypeWithEnum='Integer', dataFormat='int32', name='xRateLimit', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Rate-Limit;', baseType='Integer', containerType='null', title='null', unescapedDescription='calls per hour allowed by the user', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{ * <p><b>Response headers</b>: [CodegenProperty{openApiType='integer', baseName='X-Rate-Limit', complexType='null', getter='getxRateLimit', setter='setxRateLimit', description='calls per hour allowed by the user', dataType='Integer', datatypeWithEnum='Integer', dataFormat='int32', name='xRateLimit', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Rate-Limit;', baseType='Integer', containerType='null', title='null', unescapedDescription='calls per hour allowed by the user', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{
"type" : "integer", "type" : "integer",
"format" : "int32" "format" : "int32"
}', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=true, isModel=false, isContainer=false, isString=false, isNumeric=true, isInteger=true, isLong=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=false, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XRateLimit', nameInSnakeCase='X_RATE_LIMIT', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false}, CodegenProperty{openApiType='string', baseName='X-Expires-After', complexType='Date', getter='getxExpiresAfter', setter='setxExpiresAfter', description='date in UTC when toekn expires', dataType='Date', datatypeWithEnum='Date', dataFormat='date-time', name='xExpiresAfter', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Expires-After;', baseType='Date', containerType='null', title='null', unescapedDescription='date in UTC when toekn expires', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{ }', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=true, isModel=false, isContainer=false, isString=false, isNumeric=true, isInteger=true, isLong=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=false, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XRateLimit', nameInSnakeCase='X_RATE_LIMIT', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false, getAdditionalPropertiesIsAnyType=false}, CodegenProperty{openApiType='string', baseName='X-Expires-After', complexType='Date', getter='getxExpiresAfter', setter='setxExpiresAfter', description='date in UTC when toekn expires', dataType='Date', datatypeWithEnum='Date', dataFormat='date-time', name='xExpiresAfter', min='null', max='null', defaultValue='null', defaultValueWithParam=' = data.X-Expires-After;', baseType='Date', containerType='null', title='null', unescapedDescription='date in UTC when toekn expires', maxLength=null, minLength=null, pattern='null', example='null', jsonSchema='{
"type" : "string", "type" : "string",
"format" : "date-time" "format" : "date-time"
}', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=false, isModel=false, isContainer=false, isString=false, isNumeric=false, isInteger=false, isLong=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=true, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XExpiresAfter', nameInSnakeCase='X_EXPIRES_AFTER', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false}]</p> }', minimum='null', maximum='null', exclusiveMinimum=false, exclusiveMaximum=false, required=false, deprecated=false, hasMoreNonReadOnly=false, isPrimitiveType=false, isModel=false, isContainer=false, isString=false, isNumeric=false, isInteger=false, isLong=false, isNumber=false, isFloat=false, isDouble=false, isDecimal=false, isByteArray=false, isBinary=false, isFile=false, isBoolean=false, isDate=false, isDateTime=true, isUuid=false, isUri=false, isEmail=false, isFreeFormObject=false, isArray=false, isMap=false, isEnum=false, isReadOnly=false, isWriteOnly=false, isNullable=false, isSelfReference=false, isCircularReference=false, isDiscriminator=false, _enum=null, allowableValues=null, items=null, additionalProperties=null, vars=[], requiredVars=[], mostInnerItems=null, vendorExtensions={}, hasValidation=false, isInherited=false, discriminatorValue='null', nameInCamelCase='XExpiresAfter', nameInSnakeCase='X_EXPIRES_AFTER', enumName='null', maxItems=null, minItems=null, maxProperties=null, minProperties=null, uniqueItems=false, multipleOf=null, isXmlAttribute=false, xmlPrefix='null', xmlName='null', xmlNamespace='null', isXmlWrapped=false, isNull=false, getAdditionalPropertiesIsAnyType=false}]</p>
* *
* <p><b>Produces</b>: [{mediaType=application/xml}, {mediaType=application/json}]</p> * <p><b>Produces</b>: [{mediaType=application/xml}, {mediaType=application/json}]</p>
* <p><b>Returns</b>: {@link String}</p> * <p><b>Returns</b>: {@link String}</p>