forked from loafle/openapi-generator-original
Adds isNull to codegenX java core classes that represent schemas (#8462)
* Adds isNull to all schema classes * Adds null model and property samples, adds models test of isNull * Adds isNull tests for parameter and response also * Reverts version file
This commit is contained in:
@@ -95,6 +95,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
|
||||
public boolean isArray;
|
||||
public boolean hasChildren;
|
||||
public boolean isMap;
|
||||
public boolean isNull;
|
||||
/**
|
||||
* Indicates the OAS schema specifies "deprecated: true".
|
||||
*/
|
||||
@@ -702,6 +703,16 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
|
||||
this.xmlPrefix = xmlPrefix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getIsNull() {
|
||||
return isNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsNull(boolean isNull) {
|
||||
this.isNull = isNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
@@ -730,6 +741,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
|
||||
isMap == that.isMap &&
|
||||
isDeprecated == that.isDeprecated &&
|
||||
hasOnlyReadOnly == that.hasOnlyReadOnly &&
|
||||
isNull == that.isNull &&
|
||||
getUniqueItems() == that.getUniqueItems() &&
|
||||
getExclusiveMinimum() == that.getExclusiveMinimum() &&
|
||||
getExclusiveMaximum() == that.getExclusiveMaximum() &&
|
||||
@@ -794,7 +806,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
|
||||
getDescription(), getClassVarName(), getModelJson(), getDataType(), getXmlPrefix(), getXmlNamespace(),
|
||||
getXmlName(), getClassFilename(), getUnescapedDescription(), getDiscriminator(), getDefaultValue(),
|
||||
getArrayModelType(), isAlias, isString, isInteger, isLong, isNumber, isNumeric, isFloat, isDouble,
|
||||
isDate, isDateTime,
|
||||
isDate, isDateTime, isNull,
|
||||
getVars(), getAllVars(), getRequiredVars(), getOptionalVars(), getReadOnlyVars(), getReadWriteVars(),
|
||||
getParentVars(), getAllowableValues(), getMandatory(), getAllMandatory(), getImports(), hasVars,
|
||||
isEmptyVars(), hasMoreModels, hasEnums, isEnum, isNullable, hasRequired, hasOptional, isArray,
|
||||
@@ -885,6 +897,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties {
|
||||
sb.append(", items='").append(items).append('\'');
|
||||
sb.append(", additionalProperties='").append(additionalProperties).append('\'');
|
||||
sb.append(", isModel='").append(isModel).append('\'');
|
||||
sb.append(", isNull='").append(isNull);
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@@ -101,6 +101,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
public Number multipleOf;
|
||||
private Integer maxProperties;
|
||||
private Integer minProperties;
|
||||
public boolean isNull;
|
||||
|
||||
public CodegenParameter copy() {
|
||||
CodegenParameter output = new CodegenParameter();
|
||||
@@ -147,6 +148,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
output.minimum = this.minimum;
|
||||
output.pattern = this.pattern;
|
||||
output.additionalProperties = this.additionalProperties;
|
||||
output.isNull = this.isNull;
|
||||
|
||||
if (this._enum != null) {
|
||||
output._enum = new ArrayList<String>(this._enum);
|
||||
@@ -200,7 +202,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
|
||||
@Override
|
||||
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, 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);
|
||||
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, 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);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -244,6 +246,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
hasValidation == that.hasValidation &&
|
||||
isNullable == that.isNullable &&
|
||||
required == that.required &&
|
||||
isNull == that.isNull &&
|
||||
getExclusiveMaximum() == that.getExclusiveMaximum() &&
|
||||
getExclusiveMinimum() == that.getExclusiveMinimum() &&
|
||||
getUniqueItems() == that.getUniqueItems() &&
|
||||
@@ -357,6 +360,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
sb.append(", uniqueItems=").append(uniqueItems);
|
||||
sb.append(", contentType=").append(contentType);
|
||||
sb.append(", multipleOf=").append(multipleOf);
|
||||
sb.append(", isNull=").append(isNull);
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
@@ -568,5 +572,15 @@ public class CodegenParameter implements IJsonSchemaValidationProperties {
|
||||
public void setRequiredVars(List<CodegenProperty> requiredVars) {
|
||||
this.requiredVars = requiredVars;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getIsNull() {
|
||||
return isNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsNull(boolean isNull) {
|
||||
this.isNull = isNull;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -132,6 +132,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
||||
public boolean isUuid;
|
||||
public boolean isUri;
|
||||
public boolean isEmail;
|
||||
public boolean isNull;
|
||||
/**
|
||||
* The type is a free-form object, i.e. it is a map of string to values with no declared properties.
|
||||
* A OAS free-form schema may include the 'additionalProperties' attribute, which puts a constraint
|
||||
@@ -676,6 +677,16 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
||||
this.requiredVars = requiredVars;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getIsNull() {
|
||||
return isNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsNull(boolean isNull) {
|
||||
this.isNull = isNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder("CodegenProperty{");
|
||||
@@ -764,6 +775,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
||||
sb.append(", xmlName='").append(xmlName).append('\'');
|
||||
sb.append(", xmlNamespace='").append(xmlNamespace).append('\'');
|
||||
sb.append(", isXmlWrapped=").append(isXmlWrapped);
|
||||
sb.append(", isNull=").append(isNull);
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
@@ -812,6 +824,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
||||
isInherited == that.isInherited &&
|
||||
isXmlAttribute == that.isXmlAttribute &&
|
||||
isXmlWrapped == that.isXmlWrapped &&
|
||||
isNull == that.isNull &&
|
||||
Objects.equals(openApiType, that.openApiType) &&
|
||||
Objects.equals(baseName, that.baseName) &&
|
||||
Objects.equals(complexType, that.complexType) &&
|
||||
@@ -873,6 +886,6 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti
|
||||
items, mostInnerItems, additionalProperties, vars, requiredVars,
|
||||
vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase,
|
||||
nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName,
|
||||
xmlNamespace, isXmlWrapped);
|
||||
xmlNamespace, isXmlWrapped, isNull);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
|
||||
public boolean isArray;
|
||||
public boolean isBinary = false;
|
||||
public boolean isFile = false;
|
||||
public boolean isNull;
|
||||
public Object schema;
|
||||
public String jsonSchema;
|
||||
public Map<String, Object> vendorExtensions = new HashMap<String, Object>();
|
||||
@@ -84,7 +85,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
|
||||
isString, isNumeric, isInteger, isLong, isNumber, isFloat, isDouble, isDecimal, isByteArray, isBoolean, isDate,
|
||||
isDateTime, isUuid, isEmail, isModel, isFreeFormObject, isAnyType, isDefault, simpleType, primitiveType,
|
||||
isMap, isArray, isBinary, isFile, schema, jsonSchema, vendorExtensions, items, additionalProperties,
|
||||
vars, requiredVars,
|
||||
vars, requiredVars, isNull,
|
||||
getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(),
|
||||
getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(),
|
||||
is1xx, is2xx, is3xx, is4xx, is5xx);
|
||||
@@ -122,6 +123,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
|
||||
isFile == that.isFile &&
|
||||
items == that.items &&
|
||||
additionalProperties == that.additionalProperties &&
|
||||
isNull == that.isNull &&
|
||||
is1xx == that.is1xx &&
|
||||
is2xx == that.is2xx &&
|
||||
is3xx == that.is3xx &&
|
||||
@@ -423,6 +425,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
|
||||
sb.append(", additionalProperties='").append(additionalProperties).append('\'');
|
||||
sb.append(", vars='").append(vars).append('\'');
|
||||
sb.append(", requiredVars='").append(requiredVars).append('\'');
|
||||
sb.append(", isNull='").append(isNull);
|
||||
sb.append('}');
|
||||
return sb.toString();
|
||||
}
|
||||
@@ -443,4 +446,14 @@ public class CodegenResponse implements IJsonSchemaValidationProperties {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getIsNull() {
|
||||
return isNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIsNull(boolean isNull) {
|
||||
this.isNull = isNull;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2306,6 +2306,8 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
m.arrayModelType = arrayProperty.complexType;
|
||||
addParentContainer(m, name, schema);
|
||||
ModelUtils.syncValidationProperties(schema, m);
|
||||
} else if (ModelUtils.isNullType(schema)) {
|
||||
m.isNull = true;
|
||||
} else if (schema instanceof ComposedSchema) {
|
||||
final ComposedSchema composed = (ComposedSchema) schema;
|
||||
Map<String, Schema> properties = new LinkedHashMap<String, Schema>();
|
||||
@@ -3279,6 +3281,8 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
innerSchema = new StringSchema().description("//TODO automatically added by openapi-generator due to undefined type");
|
||||
p.setAdditionalProperties(innerSchema);
|
||||
}
|
||||
} else if (ModelUtils.isNullType(p)) {
|
||||
property.isNull = true;
|
||||
}
|
||||
|
||||
//Inline enum case:
|
||||
@@ -4044,6 +4048,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
if (r.schema != null) {
|
||||
Map<String, Schema> allSchemas = null;
|
||||
CodegenProperty cp = fromProperty("response", responseSchema);
|
||||
r.isNull = cp.isNull;
|
||||
|
||||
if (ModelUtils.isArraySchema(responseSchema)) {
|
||||
ArraySchema as = (ArraySchema) responseSchema;
|
||||
@@ -4317,6 +4322,8 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
imports.add(codegenProperty.baseType);
|
||||
codegenProperty = codegenProperty.items;
|
||||
}
|
||||
} else if (ModelUtils.isNullType(parameterSchema)) {
|
||||
codegenParameter.isNull = true;
|
||||
}
|
||||
/* TODO revise the logic below
|
||||
} else {
|
||||
@@ -6146,6 +6153,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
} else {
|
||||
codegenParameter.baseName = bodyParameterName;
|
||||
}
|
||||
codegenParameter.isNull = codegenProperty.isNull;
|
||||
codegenParameter.isPrimitiveType = true;
|
||||
codegenParameter.baseType = codegenProperty.baseType;
|
||||
codegenParameter.dataType = codegenProperty.dataType;
|
||||
|
||||
@@ -90,4 +90,8 @@ public interface IJsonSchemaValidationProperties {
|
||||
List<CodegenProperty> getRequiredVars();
|
||||
|
||||
void setRequiredVars(List<CodegenProperty> requiredVars);
|
||||
|
||||
boolean getIsNull();
|
||||
|
||||
void setIsNull(boolean isNull);
|
||||
}
|
||||
|
||||
@@ -2557,6 +2557,23 @@ public class DefaultCodegenTest {
|
||||
assertEquals(cm.isString, false);
|
||||
assertEquals(cm.isDate, true);
|
||||
|
||||
modelName = "NullModel";
|
||||
sc = openAPI.getComponents().getSchemas().get(modelName);
|
||||
cm = codegen.fromModel(modelName, sc);
|
||||
assertEquals(cm.isNull, true);
|
||||
|
||||
modelName = "ObjectWithTypeNullProperties";
|
||||
sc = openAPI.getComponents().getSchemas().get(modelName);
|
||||
cm = codegen.fromModel(modelName, sc);
|
||||
assertEquals(cm.getVars().get(0).isNull, true);
|
||||
assertEquals(cm.getVars().get(1).getItems().isNull, true);
|
||||
assertEquals(cm.getAdditionalProperties().isNull, true);
|
||||
|
||||
modelName = "ArrayOfNulls";
|
||||
sc = openAPI.getComponents().getSchemas().get(modelName);
|
||||
cm = codegen.fromModel(modelName, sc);
|
||||
assertEquals(cm.getItems().isNull, true);
|
||||
|
||||
modelName = "ObjectWithDateWithValidation";
|
||||
sc = openAPI.getComponents().getSchemas().get(modelName);
|
||||
cm = codegen.fromModel(modelName, sc);
|
||||
@@ -2618,6 +2635,20 @@ public class DefaultCodegenTest {
|
||||
assertEquals(co.bodyParams.get(0).isDateTime, true);
|
||||
assertEquals(co.responses.get(0).isString, false);
|
||||
assertEquals(co.responses.get(0).isDateTime, true);
|
||||
|
||||
path = "/null/{param}";
|
||||
operation = openAPI.getPaths().get(path).getPost();
|
||||
co = codegen.fromOperation(path, "POST", operation, null);
|
||||
assertEquals(co.pathParams.get(0).isNull, true);
|
||||
assertEquals(co.bodyParams.get(0).isNull, true);
|
||||
assertEquals(co.responses.get(0).isNull, true);
|
||||
|
||||
path = "/ref_null/{param}";
|
||||
operation = openAPI.getPaths().get(path).getPost();
|
||||
co = codegen.fromOperation(path, "POST", operation, null);
|
||||
assertEquals(co.pathParams.get(0).isNull, true);
|
||||
assertEquals(co.bodyParams.get(0).isNull, true);
|
||||
assertEquals(co.responses.get(0).isNull, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -120,8 +120,73 @@ paths:
|
||||
type: string
|
||||
format: date-time
|
||||
pattern: '^2020.*'
|
||||
/null/{param}:
|
||||
post:
|
||||
tags:
|
||||
- isX
|
||||
operationId: null
|
||||
parameters:
|
||||
- name: param
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: 'null'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: 'null'
|
||||
required: true
|
||||
responses:
|
||||
200:
|
||||
description: success
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: 'null'
|
||||
/ref_null/{param}:
|
||||
post:
|
||||
tags:
|
||||
- isX
|
||||
operationId: null
|
||||
parameters:
|
||||
- name: param
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
$ref: '#/components/schemas/NullModel'
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/NullModel'
|
||||
required: true
|
||||
responses:
|
||||
200:
|
||||
description: success
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/NullModel'
|
||||
components:
|
||||
schemas:
|
||||
NullModel:
|
||||
type: 'null'
|
||||
ObjectWithTypeNullProperties:
|
||||
type: object
|
||||
properties:
|
||||
nullProp:
|
||||
type: 'null'
|
||||
listOfNulls:
|
||||
type: array
|
||||
items:
|
||||
type: 'null'
|
||||
additionalProperties:
|
||||
type: 'null'
|
||||
ArrayOfNulls:
|
||||
type: array
|
||||
items:
|
||||
type: 'null'
|
||||
DateWithValidation:
|
||||
type: string
|
||||
format: date
|
||||
|
||||
Reference in New Issue
Block a user