CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-openapitools--openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec

Pending
Overview
Eval results
Files

model-system.mddocs/

Model System

The model system represents OpenAPI schemas, operations, parameters, and responses as Java objects for template processing and code generation. These classes provide the data structure that templates use to generate code.

Core Model Classes

CodegenModel

Represents an OpenAPI schema object (model/DTO class) in the generated code.

class CodegenModel implements IJsonSchemaValidationProperties {
    // Basic model information
    public String name;               // Schema name as in OpenAPI
    public String schemaName;         // Original schema name
    public String classname;          // Language-specific class name
    public String title;
    public String description;
    public String classVarName;
    public String modelJson;
    public String dataType;
    public String classFilename;
    
    // Inheritance
    public String parent;             // Parent class name
    public String parentSchema;       // Parent schema reference
    public List<String> interfaces;   // Implemented interfaces
    public List<String> allParents;   // All parent classes in hierarchy
    public CodegenModel parentModel;  // Resolved parent model
    public List<CodegenModel> interfaceModels; // Resolved interface models
    public List<CodegenModel> children; // Child models
    
    // Composition schemas (oneOf/anyOf/allOf)
    public Set<String> anyOf;
    public Set<String> oneOf;
    public Set<String> allOf;
    
    // Properties
    public List<CodegenProperty> vars;           // All properties
    public List<CodegenProperty> requiredVars;   // Required properties only
    public List<CodegenProperty> optionalVars;   // Optional properties only
    public List<CodegenProperty> readOnlyVars;   // Read-only properties
    public List<CodegenProperty> readWriteVars;  // Read-write properties
    public Map<String, CodegenProperty> requiredVarsMap; // Required properties map
    
    // Discriminator support
    public CodegenDiscriminator discriminator;
    
    // Behavioral flags
    public boolean hasVars;           // Has any properties
    public boolean hasRequired;       // Has required properties
    public boolean hasOptional;       // Has optional properties
    public boolean hasEnums;          // Contains enum properties
    public boolean isEnum;            // Is an enum model
    public boolean isArrayModel;      // Represents array type
    public boolean isMapModel;        // Represents map/dictionary type
}

CodegenProperty

Represents a property within a schema (field/attribute of a model).

class CodegenProperty implements Cloneable, IJsonSchemaValidationProperties {
    // Basic property information
    public String baseName;           // Original property name from OpenAPI
    public String complexType;        // Full type including generics
    public String getter;            // Getter method name
    public String setter;            // Setter method name
    public String description;
    public String title;
    public String unescapedDescription;
    
    // Type information
    public String dataType;          // Language-specific data type
    public String datatypeWithEnum;  // Data type with enum suffix
    public String dataFormat;        // OpenAPI format (date, email, etc.)
    public String name;              // Language-specific property name
    public String jsonSchema;
    
    // Validation constraints
    public String minimum;
    public String maximum;
    public boolean exclusiveMinimum;
    public boolean exclusiveMaximum;
    public Integer minLength;
    public Integer maxLength;
    public Integer minItems;
    public Integer maxItems;
    public String pattern;
    public Number multipleOf;
    
    // Behavioral flags
    public boolean isReadOnly;
    public boolean isWriteOnly;
    public boolean isRequired;
    public boolean isNullable;
    public boolean isOptional;
    public boolean hasMore;          // For template iteration
    public boolean isInherited;      // Inherited from parent
    public boolean isDiscriminator;  // Is discriminator property
    
    // Type flags
    public boolean isString;
    public boolean isNumeric;
    public boolean isInteger;
    public boolean isLong;
    public boolean isNumber;
    public boolean isFloat;
    public boolean isDouble;
    public boolean isDecimal;
    public boolean isBoolean;
    public boolean isDate;
    public boolean isDateTime;
    public boolean isEnum;
    public boolean isContainer;
    public boolean isListContainer;
    public boolean isMapContainer;
    public boolean isPrimitiveType;
    public boolean isModel;
    
    // Container properties
    public CodegenProperty items;             // For arrays
    public CodegenProperty additionalProperties; // For maps
    public List<CodegenProperty> vars;        // For nested objects
    
    // Default and example values
    public String defaultValue;
    public Object example;
    public List<Object> examples;
    
    // Enum values
    public List<Object> allowableValues;
    public Map<String, Object> allowableValuesMap;
}

CodegenOperation

Represents an API operation (HTTP method + path combination).

class CodegenOperation {
    // Basic operation information
    public String path;              // URL path with parameters
    public String operationId;       // Unique operation identifier
    public String httpMethod;        // HTTP method (GET, POST, etc.)
    public String nickname;          // Generated method name
    public String summary;           // Operation summary
    public String notes;             // Detailed description
    public String baseName;          // Base name for method generation
    
    // Parameters
    public List<CodegenParameter> allParams;      // All parameters
    public List<CodegenParameter> bodyParams;     // Request body parameters
    public List<CodegenParameter> pathParams;     // Path parameters
    public List<CodegenParameter> queryParams;    // Query parameters
    public List<CodegenParameter> headerParams;   // Header parameters
    public List<CodegenParameter> formParams;     // Form parameters
    public List<CodegenParameter> cookieParams;   // Cookie parameters
    public List<CodegenParameter> requiredParams; // Required parameters
    public List<CodegenParameter> optionalParams; // Optional parameters
    
    // Response information
    public List<CodegenResponse> responses;       // All responses
    public CodegenResponse defaultResponse;       // Default response
    public boolean returnTypeIsPrimitive;
    public String returnType;                     // Return type name
    public String returnContainer;                // Container type (list, map)
    
    // Behavioral flags
    public boolean hasParams;
    public boolean hasQueryParams;
    public boolean hasPathParams;
    public boolean hasBodyParam;
    public boolean hasFormParams;
    public boolean hasConsumes;          // Has request content types
    public boolean hasProduces;          // Has response content types
    public boolean isResponseOptional;
    public boolean hasAuthMethods;       // Requires authentication
    
    // Content types
    public List<Map<String, String>> consumes;   // Request content types
    public List<Map<String, String>> produces;   // Response content types
    
    // Authentication and security
    public List<CodegenSecurity> authMethods;
    public boolean hasMore;              // For template iteration
    
    // Vendor extensions
    public Map<String, Object> vendorExtensions;
}

CodegenParameter

Represents a parameter in an API operation.

class CodegenParameter implements IJsonSchemaValidationProperties {
    // Basic parameter information
    public String baseName;          // Original parameter name
    public String paramName;         // Language-specific parameter name
    public String description;
    public String unescapedDescription;
    
    // Type and format information
    public String dataType;          // Language-specific data type
    public String dataFormat;        // OpenAPI format
    public String collectionFormat;  // Array parameter format
    
    // Location flags
    public boolean isPathParam;
    public boolean isQueryParam;
    public boolean isHeaderParam;
    public boolean isBodyParam;
    public boolean isFormParam;
    public boolean isCookieParam;
    
    // Type flags
    public boolean isFile;
    public boolean isContainer;
    public boolean isString;
    public boolean isNumeric;
    public boolean isInteger;
    public boolean isLong;
    public boolean isPrimitiveType;
    public boolean isModel;
    public boolean isExplode;        // OpenAPI 3.0 explode parameter
    
    // Constraints and validation
    public boolean isRequired;
    public boolean isNullable;
    public String defaultValue;
    public Object example;
    public String jsonSchema;
    
    // Validation constraints (inherited from IJsonSchemaValidationProperties)
    public String minimum;
    public String maximum;
    public boolean exclusiveMinimum;
    public boolean exclusiveMaximum;
    public Integer minLength;
    public Integer maxLength;
    public Integer minItems;
    public Integer maxItems;
    public String pattern;
    
    // Container properties
    public CodegenProperty items;    // For array parameters
    
    // Template iteration
    public boolean hasMore;
    
    // Vendor extensions
    public Map<String, Object> vendorExtensions;
}

CodegenResponse

Represents a response from an API operation.

class CodegenResponse implements IJsonSchemaValidationProperties {
    // Response identification
    public String code;              // HTTP status code (e.g., "200", "4XX")
    public String message;           // Response description
    public String schema;            // Response schema reference
    
    // Type information
    public String dataType;          // Language-specific data type
    public String baseType;          // Base type without containers
    public String containerType;     // Container type (array/map)
    public boolean returnTypeIsPrimitive;
    
    // Type flags
    public boolean isString;
    public boolean isNumeric;
    public boolean isInteger;
    public boolean isLong;
    public boolean isNumber;
    public boolean isBoolean;
    public boolean isBinary;
    public boolean isByteArray;
    public boolean isDate;
    public boolean isDateTime;
    public boolean isUuid;
    public boolean isModel;
    public boolean isContainer;
    
    // Response details
    public List<CodegenProperty> headers;  // Response headers
    public Object example;
    public List<Object> examples;
    public String jsonSchema;
    
    // Behavioral flags
    public boolean hasHeaders;
    public boolean isDefault;        // Default response (no status code)
    public boolean isWildcard;       // Wildcard status code (e.g., 2XX)
    public boolean hasMore;          // For template iteration
    
    // Content types
    public List<Map<String, String>> produces;
    
    // Vendor extensions
    public Map<String, Object> vendorExtensions;
}

Template Context Objects

ModelsMap

Container for models and their imports in template context.

class ModelsMap extends HashMap<String, Object> {
    public void setModels(List<ModelMap> modelMaps);
    public List<ModelMap> getModels();
    public void setImports(List<Map<String, String>> imports);
    public List<Map<String, String>> getImports();
    public List<Map<String, String>> getImportsOrEmpty();
}

OperationsMap

Container for operations in template context.

class OperationsMap extends HashMap<String, Object> {
    public void setOperation(OperationMap objs);
    public OperationMap getOperations();
    public void setImports(List<Map<String, String>> imports);
    public List<Map<String, String>> getImports();
}

ModelMap

Container for individual model data in templates.

class ModelMap extends HashMap<String, Object> {
    // Typically contains:
    // "model" -> CodegenModel
    // "classname" -> String
    // "description" -> String
    // Additional template variables
}

OperationMap

Container for individual operation data in templates.

class OperationMap extends HashMap<String, Object> {
    // Typically contains:
    // "operation" -> List<CodegenOperation>
    // "classname" -> String
    // "package" -> String
    // Additional template variables
}

Usage Examples

Processing Models

public class CustomGenerator extends DefaultCodegen {
    
    @Override
    public CodegenModel fromModel(String name, Schema schema) {
        CodegenModel model = super.fromModel(name, schema);
        
        // Customize model properties
        model.classname = "Custom" + model.classname;
        
        // Process model properties
        for (CodegenProperty property : model.vars) {
            if (property.isString && property.maxLength != null) {
                property.vendorExtensions.put("x-max-length", property.maxLength);
            }
        }
        
        return model;
    }
    
    @Override
    public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs) {
        Map<String, ModelsMap> result = super.postProcessAllModels(objs);
        
        // Add custom processing for all models
        for (ModelsMap models : result.values()) {
            for (ModelMap modelMap : models.getModels()) {
                CodegenModel model = (CodegenModel) modelMap.get("model");
                
                // Add validation annotations for required properties
                for (CodegenProperty prop : model.requiredVars) {
                    prop.vendorExtensions.put("x-validation-required", true);
                }
            }
        }
        
        return result;
    }
}

Processing Operations

@Override
public CodegenOperation fromOperation(String resourcePath, String httpMethod, 
                                      Operation operation, List<Server> servers) {
    CodegenOperation op = super.fromOperation(resourcePath, httpMethod, operation, servers);
    
    // Customize operation
    op.nickname = "custom" + StringUtils.camelize(op.nickname);
    
    // Process parameters
    for (CodegenParameter param : op.allParams) {
        if (param.isQueryParam && param.isRequired) {
            param.vendorExtensions.put("x-required-query", true);
        }
    }
    
    // Process responses
    for (CodegenResponse response : op.responses) {
        if ("200".equals(response.code)) {
            response.vendorExtensions.put("x-success-response", true);
        }
    }
    
    return op;
}

Working with Template Context

@Override
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
    OperationsMap result = super.postProcessOperationsWithModels(objs, allModels);
    
    // Access operations
    OperationMap operations = result.getOperations();
    List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation");
    
    // Add custom template variables
    operations.put("hasAsyncOperations", 
        ops.stream().anyMatch(op -> op.vendorExtensions.containsKey("x-async")));
    
    // Group operations by tag
    Map<String, List<CodegenOperation>> operationsByTag = ops.stream()
        .collect(Collectors.groupingBy(op -> 
            op.tags != null && !op.tags.isEmpty() ? op.tags.get(0).getName() : "default"));
    
    operations.put("operationsByTag", operationsByTag);
    
    return result;
}

Install with Tessl CLI

npx tessl i tessl/maven-org-openapitools--openapi-generator

docs

configuration.md

core-generation.md

index.md

model-system.md

utilities.md

validation.md

tile.json