From 8cd0d38446dae83f28cc98ff79e044349ba2e2b0 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Thu, 11 Aug 2022 12:57:00 -0700 Subject: [PATCH] Adds $ref data to schema classes (#13163) * Adds getRef/setRef * Adds ref to CodegenModel * Adds ref to CodegenProperty * Adds ref to CodegenParameter * Adds ref to CodegenResponse * Sets ref on CodegenModel and CodegenProperty * Samples regenerated --- .../openapitools/codegen/CodegenModel.java | 15 ++++++++++++++- .../codegen/CodegenParameter.java | 14 +++++++++++++- .../openapitools/codegen/CodegenProperty.java | 19 ++++++++++++++++++- .../openapitools/codegen/CodegenResponse.java | 11 ++++++++++- .../openapitools/codegen/DefaultCodegen.java | 6 ++++++ .../IJsonSchemaValidationProperties.java | 4 ++++ .../codegen/utils/ModelUtils.java | 4 ++++ .../handler/PathHandlerInterface.java | 4 ++-- 8 files changed, 71 insertions(+), 6 deletions(-) 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 a53ab1b85bc..d98ecf30f6c 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 @@ -165,6 +165,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { private boolean isAnyType; private boolean isUuid; private Map requiredVarsMap; + private String ref; public String getAdditionalPropertiesType() { return additionalPropertiesType; @@ -174,6 +175,16 @@ public class CodegenModel implements IJsonSchemaValidationProperties { this.additionalPropertiesType = additionalPropertiesType; } + @Override + public String getRef() { + return ref; + } + + @Override + public void setRef(String ref) { + this.ref = ref; + } + public Set getAllMandatory() { return allMandatory; } @@ -929,6 +940,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { getUniqueItems() == that.getUniqueItems() && getExclusiveMinimum() == that.getExclusiveMinimum() && getExclusiveMaximum() == that.getExclusiveMaximum() && + Objects.equals(ref, that.getRef()) && Objects.equals(requiredVarsMap, that.getRequiredVarsMap()) && Objects.equals(composedSchemas, that.composedSchemas) && Objects.equals(parent, that.parent) && @@ -1002,7 +1014,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { getMinItems(), getMaxLength(), getMinLength(), getExclusiveMinimum(), getExclusiveMaximum(), getMinimum(), getMaximum(), getPattern(), getMultipleOf(), getItems(), getAdditionalProperties(), getIsModel(), getAdditionalPropertiesIsAnyType(), hasDiscriminatorWithNonEmptyMapping, - isAnyType, getComposedSchemas(), hasMultipleTypes, isDecimal, isUuid, requiredVarsMap); + isAnyType, getComposedSchemas(), hasMultipleTypes, isDecimal, isUuid, requiredVarsMap, ref); } @Override @@ -1100,6 +1112,7 @@ public class CodegenModel implements IJsonSchemaValidationProperties { sb.append(", isDecimal=").append(isDecimal); sb.append(", isUUID=").append(isUuid); sb.append(", requiredVarsMap=").append(requiredVarsMap); + sb.append(", ref=").append(ref); sb.append('}'); return sb.toString(); } 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 c69b44cefc6..c68734b7d41 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 @@ -112,6 +112,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { private boolean hasMultipleTypes = false; private LinkedHashMap content; private Map requiredVarsMap; + private String ref; public CodegenParameter copy() { CodegenParameter output = new CodegenParameter(); @@ -198,6 +199,9 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { if (this.requiredVarsMap != null) { output.setRequiredVarsMap(this.requiredVarsMap); } + if (this.ref != null) { + output.setRef(this.ref); + } output.hasValidation = this.hasValidation; output.isNullable = this.isNullable; output.isDeprecated = this.isDeprecated; @@ -234,7 +238,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, isAllowEmptyValue, 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, isDeprecated, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, additionalPropertiesIsAnyType, hasVars, hasRequired, isShort, isUnboundedInteger, hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, schema, content, requiredVarsMap); + 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, isAllowEmptyValue, 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, isDeprecated, required, getMaximum(), getExclusiveMaximum(), getMinimum(), getExclusiveMinimum(), getMaxLength(), getMinLength(), getPattern(), getMaxItems(), getMinItems(), getUniqueItems(), contentType, multipleOf, isNull, additionalPropertiesIsAnyType, hasVars, hasRequired, isShort, isUnboundedInteger, hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, schema, content, requiredVarsMap, ref); } @Override @@ -290,6 +294,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { getExclusiveMaximum() == that.getExclusiveMaximum() && getExclusiveMinimum() == that.getExclusiveMinimum() && getUniqueItems() == that.getUniqueItems() && + Objects.equals(ref, that.getRef()) && Objects.equals(requiredVarsMap, that.getRequiredVarsMap()) && Objects.equals(content, that.getContent()) && Objects.equals(schema, that.getSchema()) && @@ -421,6 +426,7 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { sb.append(", schema=").append(schema); sb.append(", content=").append(content); sb.append(", requiredVarsMap=").append(requiredVarsMap); + sb.append(", ref=").append(ref); sb.append('}'); return sb.toString(); } @@ -827,5 +833,11 @@ public class CodegenParameter implements IJsonSchemaValidationProperties { @Override public void setRequiredVarsMap(Map requiredVarsMap) { this.requiredVarsMap=requiredVarsMap; } + + @Override + public String getRef() { return ref; } + + @Override + public void setRef(String ref) { this.ref=ref; } } 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 8d92cd6a0fe..ddd1ba5e4a8 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 @@ -195,6 +195,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti private CodegenComposedSchemas composedSchemas = null; private boolean hasMultipleTypes = false; private Map requiredVarsMap; + private String ref; public String getBaseName() { return baseName; @@ -660,6 +661,16 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti return composedSchemas; } + @Override + public void setRef(String ref) { + this.ref = ref; + } + + @Override + public String getRef() { + return ref; + } + @Override public CodegenProperty clone() { try { @@ -694,6 +705,9 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti if (this.requiredVarsMap != null) { cp.setRequiredVarsMap(this.requiredVarsMap); } + if (this.ref != null) { + cp.setRef(this.ref); + } return cp; } catch (CloneNotSupportedException e) { @@ -977,6 +991,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti sb.append(", composedSchemas=").append(composedSchemas); sb.append(", hasMultipleTypes=").append(hasMultipleTypes); sb.append(", requiredVarsMap=").append(requiredVarsMap); + sb.append(", ref=").append(ref); sb.append('}'); return sb.toString(); } @@ -1035,6 +1050,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() && getHasVars() == that.getHasVars() && getHasRequired() == that.getHasRequired() && + Objects.equals(ref, that.getRef()) && Objects.equals(requiredVarsMap, that.getRequiredVarsMap()) && Objects.equals(composedSchemas, that.composedSchemas) && Objects.equals(openApiType, that.openApiType) && @@ -1099,6 +1115,7 @@ public class CodegenProperty implements Cloneable, IJsonSchemaValidationProperti vendorExtensions, hasValidation, isInherited, discriminatorValue, nameInCamelCase, nameInSnakeCase, enumName, maxItems, minItems, isXmlAttribute, xmlPrefix, xmlName, xmlNamespace, isXmlWrapped, isNull, additionalPropertiesIsAnyType, hasVars, hasRequired, - hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, requiredVarsMap); + hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, requiredVarsMap, + ref); } } 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 6cdcb3837bd..c30c4374142 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 @@ -90,6 +90,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { private boolean hasMultipleTypes = false; private LinkedHashMap content; private Map requiredVarsMap; + private String ref; @Override public int hashCode() { @@ -102,7 +103,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { getMinLength(), exclusiveMinimum, exclusiveMaximum, getMinimum(), getMaximum(), getPattern(), is1xx, is2xx, is3xx, is4xx, is5xx, additionalPropertiesIsAnyType, hasVars, hasRequired, hasDiscriminatorWithNonEmptyMapping, composedSchemas, hasMultipleTypes, responseHeaders, content, - requiredVarsMap); + requiredVarsMap, ref); } @Override @@ -151,6 +152,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { getAdditionalPropertiesIsAnyType() == that.getAdditionalPropertiesIsAnyType() && getHasVars() == that.getHasVars() && getHasRequired() == that.getHasRequired() && + Objects.equals(ref, that.getRef()) && Objects.equals(requiredVarsMap, that.getRequiredVarsMap()) && Objects.equals(content, that.getContent()) && Objects.equals(responseHeaders, that.getResponseHeaders()) && @@ -542,6 +544,7 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { sb.append(", responseHeaders=").append(responseHeaders); sb.append(", content=").append(content); sb.append(", requiredVarsMap=").append(requiredVarsMap); + sb.append(", ref=").append(ref); sb.append('}'); return sb.toString(); } @@ -675,4 +678,10 @@ public class CodegenResponse implements IJsonSchemaValidationProperties { @Override public void setRequiredVarsMap(Map requiredVarsMap) { this.requiredVarsMap=requiredVarsMap; } + + @Override + public String getRef() { return ref; } + + @Override + public void setRef(String ref) { this.ref=ref; } } 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 51d3627317c..666b0b9955f 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 @@ -2892,6 +2892,9 @@ public class DefaultCodegen implements CodegenConfig { // schema by unaliasSchema and one of the above code paths will be taken ; } + if (schema.get$ref() != null) { + m.setRef(schema.get$ref()); + } if (schema instanceof ComposedSchema) { updateModelForComposedSchema(m, schema, allDefinitions); @@ -3763,6 +3766,9 @@ public class DefaultCodegen implements CodegenConfig { // referenced model ; } + if (p.get$ref() != null) { + property.setRef(p.get$ref()); + } boolean isAnyTypeWithNothingElseSet = (ModelUtils.isAnyType(p) && (p.getProperties() == null || p.getProperties().isEmpty()) && 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 1bb16a6bc3a..4eacde57abc 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 @@ -165,6 +165,10 @@ public interface IJsonSchemaValidationProperties { void setIsAnyType(boolean isAnyType); + String getRef(); + + void setRef(String ref); + CodegenComposedSchemas getComposedSchemas(); void setComposedSchemas(CodegenComposedSchemas composedSchemas); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java index 09bc8dc2c81..1816a518f7f 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/utils/ModelUtils.java @@ -1626,6 +1626,10 @@ public class ModelUtils { * @return boolean */ public static boolean isAnyType(Schema schema) { + // $ref is not a type, it is a keyword + // TODO remove the ref check here, or pass in the spec version + // openapi 3.1.0 specs allow ref to be adjacent to any keyword + // openapi 3.0.3 and earlier do not allow adjacent keywords to refs return (schema.get$ref() == null && schema.getType() == null); } 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 0216276e546..7d89a3b0291 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, isShort=true, isLong=false, isUnboundedInteger=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, isInnerEnum=false, isAnyType=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, getHasDiscriminatorWithNonEmptyMapping=false, composedSchemas=null, hasMultipleTypes=false, requiredVarsMap=null}, CodegenProperty{openApiType='string', baseName='X-Expires-After', complexType='Date', getter='getxExpiresAfter', setter='setxExpiresAfter', description='date in UTC when token 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 token 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, isShort=true, isLong=false, isUnboundedInteger=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, isInnerEnum=false, isAnyType=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, getHasDiscriminatorWithNonEmptyMapping=false, composedSchemas=null, hasMultipleTypes=false, requiredVarsMap=null, ref=null}, CodegenProperty{openApiType='string', baseName='X-Expires-After', complexType='Date', getter='getxExpiresAfter', setter='setxExpiresAfter', description='date in UTC when token 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 token 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, isShort=false, isLong=false, isUnboundedInteger=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, isInnerEnum=false, isAnyType=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, getHasDiscriminatorWithNonEmptyMapping=false, composedSchemas=null, hasMultipleTypes=false, requiredVarsMap=null}]

+}', 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, isShort=false, isLong=false, isUnboundedInteger=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, isInnerEnum=false, isAnyType=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, getHasDiscriminatorWithNonEmptyMapping=false, composedSchemas=null, hasMultipleTypes=false, requiredVarsMap=null, ref=null}]

* *

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

*

Returns: {@link String}