diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java index 76bdf64501b..206732f8d54 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenModel.java @@ -154,6 +154,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { private CodegenProperty items; private CodegenProperty additionalProperties; private boolean isModel; + private boolean hasRequiredVars; public String getAdditionalPropertiesType() { return additionalPropertiesType; @@ -733,6 +734,16 @@ public class CodegenModel implements IJsonSchemaValidationProperties { this.hasVars = hasVars; } + @Override + public boolean getHasRequired() { + return this.hasRequired; + } + + @Override + public void setHasRequired(boolean hasRequired) { + this.hasRequired = hasRequired; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java index 6a93e266730..326785046d9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenParameter.java @@ -104,6 +104,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { private Integer maxProperties; private Integer minProperties; public boolean isNull; + private boolean hasRequired; public CodegenParameter copy() { CodegenParameter output = new CodegenParameter(); @@ -153,6 +154,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { output.isNull = this.isNull; output.setAdditionalPropertiesIsAnyType(this.getAdditionalPropertiesIsAnyType()); output.setHasVars(this.hasVars); + output.setHasRequired(this.hasRequired); if (this._enum != null) { output._enum = new ArrayList(this._enum); @@ -207,7 +209,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, 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, additionalPropertiesIsAnyType, hasVars); + 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, additionalPropertiesIsAnyType, hasVars, hasRequired); } @Override @@ -254,6 +256,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { isNull == that.isNull && getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() && getHasVars() == that.getHasVars() && + getHasRequired() == that.getHasRequired() && getExclusiveMaximum() == that.getExclusiveMaximum() && getExclusiveMinimum() == that.getExclusiveMinimum() && getUniqueItems() == that.getUniqueItems() && @@ -372,6 +375,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { sb.append(", isNull=").append(isNull); sb.append(", getAdditionalPropertiesIsAnyType=").append(additionalPropertiesIsAnyType); sb.append(", getHasVars=").append(hasVars); + sb.append(", getHasRequired=").append(hasRequired); sb.append('}'); return sb.toString(); } @@ -619,5 +623,15 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { public void setHasVars(boolean hasVars) { this.hasVars = hasVars; } + + @Override + public boolean getHasRequired() { + return this.hasRequired; + } + + @Override + public void setHasRequired(boolean hasRequired) { + this.hasRequired = hasRequired; + } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java index f00ef51ffba..ce54eaea389 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenProperty.java @@ -187,6 +187,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti public boolean isXmlWrapped = false; private boolean additionalPropertiesIsAnyType; private boolean hasVars; + private boolean hasRequired; public String getBaseName() { return baseName; @@ -715,6 +716,16 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti this.hasVars = hasVars; } + @Override + public boolean getHasRequired() { + return this.hasRequired; + } + + @Override + public void setHasRequired(boolean hasRequired) { + this.hasRequired = hasRequired; + } + @Override public String toString() { final StringBuilder sb = new StringBuilder("CodegenProperty{"); @@ -806,6 +817,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti sb.append(", isNull=").append(isNull); sb.append(", getAdditionalPropertiesIsAnyType=").append(getAdditionalPropertiesIsAnyType()); sb.append(", getHasVars=").append(getHasVars()); + sb.append(", getHasRequired=").append(getHasRequired()); sb.append('}'); return sb.toString(); } @@ -857,6 +869,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti isNull == that.isNull && getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() && getHasVars() == that.getHasVars() && + getHasRequired() ==that.getHasRequired() && Objects.equals(openApiType, that.openApiType) && Objects.equals(baseName, that.baseName) && Objects.equals(complexType, that.complexType) && @@ -918,6 +931,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, isNull, additionalPropertiesIsAnyType, hasVars); + xmlNamespace, isXmlWrapped, isNull, additionalPropertiesIsAnyType, hasVars, hasRequired); } } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java index 37a21190fc5..bb062c1304f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenResponse.java @@ -81,6 +81,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { private boolean hasValidation; private boolean additionalPropertiesIsAnyType; private boolean hasVars; + private boolean hasRequired; @Override public int hashCode() { @@ -91,7 +92,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { vars, requiredVars, isNull, hasValidation, getMaxProperties(), getMinProperties(), uniqueItems, getMaxItems(), getMinItems(), getMaxLength(), getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(), - is1xx, is2xx, is3xx, is4xx, is5xx, additionalPropertiesIsAnyType, hasVars); + is1xx, is2xx, is3xx, is4xx, is5xx, additionalPropertiesIsAnyType, hasVars, hasRequired); } @Override @@ -135,6 +136,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { is5xx == that.is5xx && getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() && getHasVars() == that.getHasVars() && + getHasRequired() == that.getHasRequired() && Objects.equals(vars, that.vars) && Objects.equals(requiredVars, that.requiredVars) && Objects.equals(headers, that.headers) && @@ -371,6 +373,16 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { this.requiredVars = requiredVars; } + @Override + public boolean getHasRequired() { + return this.hasRequired; + } + + @Override + public void setHasRequired(boolean hasRequired) { + this.hasRequired = hasRequired; + } + @Override public String toString() { final StringBuilder sb = new StringBuilder("CodegenResponse{"); @@ -435,6 +447,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { sb.append(", hasValidation='").append(hasValidation); sb.append(", getAdditionalPropertiesIsAnyType=").append(additionalPropertiesIsAnyType); sb.append(", getHasVars=").append(hasVars); + sb.append(", getHasRequired=").append(hasRequired); sb.append('}'); return sb.toString(); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index cfdf97f15bd..5155526a4d3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -2579,6 +2579,10 @@ public class DefaultCodegen implements CodegenConfig { } } + if (m.requiredVars != null && m.requiredVars.size() > 0){ + m.setHasRequired(true); + } + if (sortModelPropertiesByRequiredFlag) { Comparator comparator = new Comparator() { @Override @@ -6170,6 +6174,9 @@ public class DefaultCodegen implements CodegenConfig { .stream() .filter(p -> Boolean.TRUE.equals(p.required)).collect(Collectors.toList()); property.setRequiredVars(requireCpVars); + if (property.getRequiredVars() != null && property.getRequiredVars().size() > 0) { + property.setHasRequired(true); + } } setAddProps(schema, property); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java index fa9c8f53597..4eb567b6cdc 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/IJsonSchemaValidationProperties.java @@ -105,5 +105,9 @@ public interface IJsonSchemaValidationProperties { boolean getHasVars(); - void setHasVars(boolean hasVars); + void setHasVars(boolean hasRequiredVars); + + boolean getHasRequired(); + + void setHasRequired(boolean hasRequired); } \ No newline at end of file diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java index f103f744f0a..17c5864fe00 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java @@ -3075,4 +3075,203 @@ public class DefaultCodegenTest { // does not have vars because the inline schema was extracted into a component ref assertEquals(co.responses.get(0).getHasVars(), false); } + + @Test + public void testHasRequiredInModel() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_8906.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + codegen.setDisallowAdditionalPropertiesIfNotPresent(false); + + Schema sc; + CodegenModel cm; + + List modelNamesWithoutRequired = Arrays.asList( + "EmptyObject", + "ObjectWithOptionalB", + "AnyTypeNoPropertiesNoRequired", + "AnyTypeHasPropertiesNoRequired", + "AnyTypeNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectNoPropertiesNoRequired", + "ObjectHasPropertiesNoRequired", + "ObjectNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedNoAllofPropsNoPropertiesNoRequired", + "ComposedNoAllofPropsHasPropertiesNoRequired", + "ComposedNoAllofPropsNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofOptPropNoPropertiesNoRequired", + "ComposedHasAllofOptPropHasPropertiesNoRequired", + "ComposedHasAllofOptPropNoPropertiesHasRequired" // TODO: hasRequired should be true, fix this + ); + for (String modelName : modelNamesWithoutRequired) { + sc = openAPI.getComponents().getSchemas().get(modelName); + cm = codegen.fromModel(modelName, sc); + assertEquals(cm.getHasRequired(), false); + } + + List modelNamesWithRequired = Arrays.asList( + "AnyTypeHasPropertiesHasRequired", + "ObjectHasPropertiesHasRequired", + "ComposedNoAllofPropsHasPropertiesHasRequired", + "ComposedHasAllofOptPropHasPropertiesHasRequired", + "ComposedHasAllofReqPropNoPropertiesNoRequired", // TODO: hasRequired should be false, fix this + "ComposedHasAllofReqPropHasPropertiesNoRequired", // TODO: hasRequired should be false, fix this + "ComposedHasAllofReqPropNoPropertiesHasRequired", + "ComposedHasAllofReqPropHasPropertiesHasRequired" + ); + for (String modelName : modelNamesWithRequired) { + sc = openAPI.getComponents().getSchemas().get(modelName); + cm = codegen.fromModel(modelName, sc); + assertEquals(cm.getHasRequired(), true); + } + } + + @Test + public void testHasRequiredInProperties() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_8906.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + codegen.setDisallowAdditionalPropertiesIfNotPresent(false); + + String modelName = "CodegenPropertiesModel"; + Schema sc = openAPI.getComponents().getSchemas().get(modelName); + CodegenModel cm = codegen.fromModel(modelName, sc); + + HashSet modelNamesWithoutRequired = new HashSet(Arrays.asList( + "EmptyObject", + "ObjectWithOptionalB", + "AnyTypeNoPropertiesNoRequired", + "AnyTypeHasPropertiesNoRequired", + "AnyTypeNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "AnyTypeHasPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectNoPropertiesNoRequired", + "ObjectHasPropertiesNoRequired", // Note: this is extracted into another component and is a ref + "ObjectNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedNoAllofPropsNoPropertiesNoRequired", + "ComposedNoAllofPropsHasPropertiesNoRequired", + "ComposedNoAllofPropsNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofOptPropNoPropertiesNoRequired", + "ComposedHasAllofOptPropHasPropertiesNoRequired", + "ComposedHasAllofOptPropNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectHasPropertiesHasRequired", // False because this is extracted into another component and is a ref + "ComposedNoAllofPropsHasPropertiesHasRequired", // False because this is extracted into another component and is a ref + "ComposedHasAllofOptPropHasPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofReqPropNoPropertiesNoRequired", + "ComposedHasAllofReqPropHasPropertiesNoRequired", + "ComposedHasAllofReqPropNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofReqPropHasPropertiesHasRequired" // TODO: hasRequired should be true, fix this + )); + HashSet modelNamesWithRequired = new HashSet(Arrays.asList( + )); + for (CodegenProperty var : cm.getVars()) { + boolean hasRequired = var.getHasRequired(); + if (modelNamesWithoutRequired.contains(var.name)) { + assertEquals(hasRequired, false); + } else if (modelNamesWithRequired.contains(var.name)) { + assertEquals(hasRequired, true); + } else { + // All variables must be in the above sets + assertEquals(true, false); + } + } + } + + @Test + public void testHasRequiredInParameters() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_8906.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + codegen.setDisallowAdditionalPropertiesIfNotPresent(false); + + String path = "/schemasInQueryParamsAndResponses"; + Operation operation = openAPI.getPaths().get(path).getPost(); + CodegenOperation co = codegen.fromOperation(path, "POST", operation, null); + + HashSet modelNamesWithoutRequired = new HashSet(Arrays.asList( + "EmptyObject", + "ObjectWithOptionalB", + "AnyTypeNoPropertiesNoRequired", + "AnyTypeHasPropertiesNoRequired", + "AnyTypeNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "AnyTypeHasPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectNoPropertiesNoRequired", + "ObjectHasPropertiesNoRequired", // Note: this is extracted into another component and is a ref + "ObjectNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedNoAllofPropsNoPropertiesNoRequired", + "ComposedNoAllofPropsHasPropertiesNoRequired", + "ComposedNoAllofPropsNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofOptPropNoPropertiesNoRequired", + "ComposedHasAllofOptPropHasPropertiesNoRequired", + "ComposedHasAllofOptPropNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectHasPropertiesHasRequired", // False because this is extracted into another component and is a ref + "ComposedNoAllofPropsHasPropertiesHasRequired", // False because this is extracted into another component and is a ref + "ComposedHasAllofOptPropHasPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofReqPropNoPropertiesNoRequired", + "ComposedHasAllofReqPropHasPropertiesNoRequired", + "ComposedHasAllofReqPropNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofReqPropHasPropertiesHasRequired" // TODO: hasRequired should be true, fix this + )); + HashSet modelNamesWithRequired = new HashSet(Arrays.asList( + )); + for (CodegenParameter param : co.pathParams) { + boolean hasRequired = param.getHasRequired(); + if (modelNamesWithoutRequired.contains(param.baseName)) { + assertEquals(hasRequired, false); + } else if (modelNamesWithRequired.contains(param.baseName)) { + assertEquals(hasRequired, true); + } else { + // All variables must be in the above sets + assertEquals(true, false); + } + } + } + + @Test + public void testHasRequiredInResponses() { + final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_8906.yaml"); + final DefaultCodegen codegen = new DefaultCodegen(); + codegen.setOpenAPI(openAPI); + codegen.setDisallowAdditionalPropertiesIfNotPresent(false); + + String path = "/schemasInQueryParamsAndResponses"; + Operation operation = openAPI.getPaths().get(path).getPost(); + CodegenOperation co = codegen.fromOperation(path, "POST", operation, null); + + HashSet modelNamesWithoutRequired = new HashSet(Arrays.asList( + "EmptyObject", + "ObjectWithOptionalB", + "AnyTypeNoPropertiesNoRequired", + "AnyTypeHasPropertiesNoRequired", + "AnyTypeNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "AnyTypeHasPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectNoPropertiesNoRequired", + "ObjectHasPropertiesNoRequired", // Note: this is extracted into another component and is a ref + "ObjectNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedNoAllofPropsNoPropertiesNoRequired", + "ComposedNoAllofPropsHasPropertiesNoRequired", + "ComposedNoAllofPropsNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofOptPropNoPropertiesNoRequired", + "ComposedHasAllofOptPropHasPropertiesNoRequired", + "ComposedHasAllofOptPropNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ObjectHasPropertiesHasRequired", // False because this is extracted into another component and is a ref + "ComposedNoAllofPropsHasPropertiesHasRequired", // False because this is extracted into another component and is a ref + "ComposedHasAllofOptPropHasPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofReqPropNoPropertiesNoRequired", + "ComposedHasAllofReqPropHasPropertiesNoRequired", + "ComposedHasAllofReqPropNoPropertiesHasRequired", // TODO: hasRequired should be true, fix this + "ComposedHasAllofReqPropHasPropertiesHasRequired" // TODO: hasRequired should be true, fix this + )); + HashSet modelNamesWithRequired = new HashSet(Arrays.asList( + )); + for (CodegenResponse cr : co.responses) { + boolean hasRequired = cr.getHasRequired(); + if (modelNamesWithoutRequired.contains(cr.message)) { + assertEquals(hasRequired, false); + } else if (modelNamesWithRequired.contains(cr.message)) { + assertEquals(hasRequired, true); + } else { + // All variables must be in the above sets + assertEquals(true, false); + } + } + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/issue_8906.yaml b/modules/openapi-generator/src/test/resources/3_0/issue_8906.yaml new file mode 100644 index 00000000000..10056087574 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/issue_8906.yaml @@ -0,0 +1,586 @@ +openapi: 3.0.1 +info: + title: OpenAPI Petstore + description: "for schemas with properties and required ensure correct hasVars, hasRequired, vars, and requiredVars" + license: + name: Apache-2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +servers: + - url: http://petstore.swagger.io:80/v2 +tags: [] +paths: + /schemasInQueryParamsAndResponses: + post: + operationId: schemasInQueryParams + parameters: + - name: AnyTypeNoPropertiesNoRequired + in: query + required: true + schema: + description: "NoPropertiesNoRequired" + - name: AnyTypeHasPropertiesNoRequired + in: query + required: true + schema: + properties: + a: + type: string + - name: AnyTypeNoPropertiesHasRequired + in: query + required: true + schema: + required: + - a + - name: AnyTypeHasPropertiesHasRequired + in: query + required: true + schema: + required: + - a + properties: + a: + type: string + - name: ObjectNoPropertiesNoRequired + in: query + required: true + schema: + type: object + - name: ObjectHasPropertiesNoRequired + in: query + required: true + schema: + type: object + properties: + a: + type: string + - name: ObjectNoPropertiesHasRequired + in: query + required: true + schema: + type: object + required: + - a + - name: ObjectHasPropertiesHasRequired + in: query + required: true + schema: + type: object + required: + - a + properties: + a: + type: string + - name: ComposedNoAllofPropsNoPropertiesNoRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + - name: ComposedNoAllofPropsHasPropertiesNoRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + properties: + a: + type: string + - name: ComposedNoAllofPropsNoPropertiesHasRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + required: + - a + - name: ComposedNoAllofPropsHasPropertiesHasRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + required: + - a + properties: + a: + type: string + - name: ComposedHasAllofOptPropNoPropertiesNoRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + - name: ComposedHasAllofOptPropHasPropertiesNoRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + properties: + a: + type: string + - name: ComposedHasAllofOptPropNoPropertiesHasRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + required: + - a + - name: ComposedHasAllofOptPropHasPropertiesHasRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + required: + - a + properties: + a: + type: string + - name: ComposedHasAllofReqPropNoPropertiesNoRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + - name: ComposedHasAllofReqPropHasPropertiesNoRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + properties: + a: + type: string + - name: ComposedHasAllofReqPropNoPropertiesHasRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + required: + - a + - name: ComposedHasAllofReqPropHasPropertiesHasRequired + in: query + required: true + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + required: + - a + properties: + a: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: true + responses: + 200: + description: AnyTypeNoPropertiesNoRequired + content: + application/json: + schema: + description: "NoPropertiesNoRequired" + 201: + description: AnyTypeHasPropertiesNoRequired + content: + application/json: + schema: + properties: + a: + type: string + 202: + description: AnyTypeNoPropertiesHasRequired + content: + application/json: + schema: + required: + - a + 203: + description: AnyTypeHasPropertiesHasRequired + content: + application/json: + schema: + required: + - a + properties: + a: + type: string + 210: + description: ObjectNoPropertiesNoRequired + content: + application/json: + schema: + type: object + 211: + description: ObjectHasPropertiesNoRequired + content: + application/json: + schema: + type: object + properties: + a: + type: string + 212: + description: ObjectNoPropertiesHasRequired + content: + application/json: + schema: + type: object + required: + - a + 213: + description: ObjectHasPropertiesHasRequired + content: + application/json: + schema: + type: object + required: + - a + properties: + a: + type: string + 220: + description: ComposedNoAllofPropsNoPropertiesNoRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + 221: + description: ComposedNoAllofPropsHasPropertiesNoRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + properties: + a: + type: string + 222: + description: ComposedNoAllofPropsNoPropertiesHasRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + required: + - a + 223: + description: ComposedNoAllofPropsHasPropertiesHasRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/EmptyObject' + required: + - a + properties: + a: + type: string + 230: + description: ComposedHasAllofOptPropNoPropertiesNoRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + 231: + description: ComposedHasAllofOptPropHasPropertiesNoRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + properties: + a: + type: string + 232: + description: ComposedHasAllofOptPropNoPropertiesHasRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + required: + - a + 233: + description: ComposedHasAllofOptPropHasPropertiesHasRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + required: + - a + properties: + a: + type: string + 240: + description: ComposedHasAllofReqPropNoPropertiesNoRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + 241: + description: ComposedHasAllofReqPropHasPropertiesNoRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + properties: + a: + type: string + 242: + description: ComposedHasAllofReqPropNoPropertiesHasRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + required: + - a + 243: + description: ComposedHasAllofReqPropHasPropertiesHasRequired + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + required: + - a + properties: + a: + type: string +components: + schemas: + EmptyObject: + type: object + ObjectWithOptionalB: + type: object + properties: + b: + type: string + ObjectWithRequiredB: + type: object + properties: + b: + type: string + required: + - b + AnyTypeNoPropertiesNoRequired: + description: "NoPropertiesNoRequired" + AnyTypeHasPropertiesNoRequired: + properties: + a: + type: string + AnyTypeNoPropertiesHasRequired: + required: + - a + AnyTypeHasPropertiesHasRequired: + required: + - a + properties: + a: + type: string + ObjectNoPropertiesNoRequired: + type: object + ObjectHasPropertiesNoRequired: + type: object + properties: + a: + type: string + ObjectNoPropertiesHasRequired: + type: object + required: + - a + ObjectHasPropertiesHasRequired: + type: object + required: + - a + properties: + a: + type: string + ComposedNoAllofPropsNoPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + ComposedNoAllofPropsHasPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + properties: + a: + type: string + ComposedNoAllofPropsNoPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + required: + - a + ComposedNoAllofPropsHasPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + type: object + required: + - a + properties: + a: + type: string + ComposedHasAllofOptPropNoPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + ComposedHasAllofOptPropHasPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + properties: + a: + type: string + ComposedHasAllofOptPropNoPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + required: + - a + ComposedHasAllofOptPropHasPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + type: object + required: + - a + properties: + a: + type: string + ComposedHasAllofReqPropNoPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + ComposedHasAllofReqPropHasPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + properties: + a: + type: string + ComposedHasAllofReqPropNoPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + required: + - a + ComposedHasAllofReqPropHasPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + type: object + required: + - a + properties: + a: + type: string + CodegenPropertiesModel: + description: "this model lets us check CodegenProperty.vars/requiredVars/hasVars/hasRequired" + type: object + properties: + AnyTypeNoPropertiesNoRequired: + description: "NoPropertiesNoRequired" + AnyTypeHasPropertiesNoRequired: + properties: + a: + type: string + AnyTypeNoPropertiesHasRequired: + required: + - a + AnyTypeHasPropertiesHasRequired: + required: + - a + properties: + a: + type: string + ObjectNoPropertiesNoRequired: + type: object + ObjectHasPropertiesNoRequired: + type: object + properties: + a: + type: string + ObjectNoPropertiesHasRequired: + type: object + required: + - a + ObjectHasPropertiesHasRequired: + type: object + required: + - a + properties: + a: + type: string + ComposedNoAllofPropsNoPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + ComposedNoAllofPropsHasPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + properties: + a: + type: string + ComposedNoAllofPropsNoPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + required: + - a + ComposedNoAllofPropsHasPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/EmptyObject' + type: object + required: + - a + properties: + a: + type: string + ComposedHasAllofOptPropNoPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + ComposedHasAllofOptPropHasPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + properties: + a: + type: string + ComposedHasAllofOptPropNoPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + required: + - a + ComposedHasAllofOptPropHasPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithOptionalB' + type: object + required: + - a + properties: + a: + type: string + ComposedHasAllofReqPropNoPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + ComposedHasAllofReqPropHasPropertiesNoRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + properties: + a: + type: string + ComposedHasAllofReqPropNoPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + required: + - a + ComposedHasAllofReqPropHasPropertiesHasRequired: + allOf: + - $ref: '#/components/schemas/ObjectWithRequiredB' + type: object + required: + - a + properties: + a: + type: string + securitySchemes: {} \ No newline at end of file diff --git a/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java b/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java index 8e45e32d349..41b91a89132 100644 --- a/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java +++ b/samples/server/petstore/java-undertow/src/main/java/org/openapitools/handler/PathHandlerInterface.java @@ -539,10 +539,10 @@ public interface PathHandlerInterface { *

Response headers: [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", "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, getAdditionalPropertiesIsAnyType=false, getHasVars=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, getHasVars=false, getHasRequired=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", "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, getAdditionalPropertiesIsAnyType=false, getHasVars=false}]

+}', 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, getHasVars=false, getHasRequired=false}]

* *

Produces: [{mediaType=application/xml}, {mediaType=application/json}]

*

Returns: {@link String}