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

configuration.mddocs/

Configuration Management

The configuration system provides fluent APIs for setting up code generation parameters, including input specifications, output directories, package names, and custom properties.

Configuration Classes

CodegenConfigurator

Main configuration builder for setting up code generation workflows.

class CodegenConfigurator {
    // Static factory methods
    public static CodegenConfigurator fromFile(String configFile, Module... modules);
    
    // Core configuration
    public CodegenConfigurator setGeneratorName(String generatorName);
    public CodegenConfigurator setInputSpec(String inputSpec);
    public CodegenConfigurator setOutputDir(String outputDir);
    public CodegenConfigurator setTemplateDir(String templateDir);
    
    // Package configuration
    public CodegenConfigurator setApiPackage(String apiPackage);
    public CodegenConfigurator setModelPackage(String modelPackage);
    public CodegenConfigurator setInvokerPackage(String invokerPackage);
    
    // Artifact configuration
    public CodegenConfigurator setGroupId(String groupId);
    public CodegenConfigurator setArtifactId(String artifactId);
    public CodegenConfigurator setArtifactVersion(String artifactVersion);
    public CodegenConfigurator setLibrary(String library);
    
    // Authentication
    public CodegenConfigurator setAuth(String auth);
    
    // Custom properties
    public CodegenConfigurator addAdditionalProperty(String key, Object value);
    public CodegenConfigurator addTypeMapping(String key, String value);
    public CodegenConfigurator addImportMapping(String key, String value);
    public CodegenConfigurator addLanguageSpecificPrimitive(String value);
    
    // Generation control
    public CodegenConfigurator setSkipOverwrite(Boolean skipOverwrite);
    public CodegenConfigurator setRemoveOperationIdPrefix(Boolean removeOperationIdPrefix);
    
    // Build methods
    public ClientOptInput toClientOptInput();
    public Context<?> toContext();
}

ClientOptInput

Container for generator input parameters and configuration.

class ClientOptInput {
    // Fluent configuration
    public ClientOptInput openAPI(OpenAPI openAPI);
    public ClientOptInput config(CodegenConfig codegenConfig);
    public ClientOptInput userDefinedTemplates(List<TemplateDefinition> userDefinedTemplates);
    
    // Getters (deprecated but functional)
    @Deprecated public OpenAPI getOpenAPI();
    @Deprecated public CodegenConfig getConfig();
    @Deprecated public List<TemplateDefinition> getUserDefinedTemplates();
}

CliOption

Represents a command-line option for code generation.

class CliOption {
    // Constructors
    public CliOption(String opt, String description);
    public CliOption(String opt, String description, String type);
    
    // Static factory methods
    public static CliOption newBoolean(String opt, String description);
    public static CliOption newBoolean(String opt, String description, boolean defaultValue);
    public static CliOption newString(String opt, String description);
    
    // Configuration
    public CliOption defaultValue(String defaultValue);
    public CliOption addEnum(String value, String description);
    
    // Getters
    public String getOpt();
    public String getDescription();
    public String getType();
    public String getDefault();
    public String getOptionHelp();
    public Map<String, String> getEnum();
}

Usage Examples

Basic Configuration

// Create configurator and set basic options
CodegenConfigurator configurator = new CodegenConfigurator()
    .setGeneratorName("java")
    .setInputSpec("https://petstore.swagger.io/v2/swagger.json")
    .setOutputDir("./generated-client")
    .setApiPackage("com.example.petstore.api")
    .setModelPackage("com.example.petstore.model")
    .setInvokerPackage("com.example.petstore.client");

// Generate code
DefaultGenerator generator = new DefaultGenerator();
generator.opts(configurator.toClientOptInput()).generate();

Configuration from File

// Load configuration from JSON file
CodegenConfigurator configurator = CodegenConfigurator.fromFile("config.json");

// Additional configuration can be added
configurator
    .setOutputDir("./custom-output")
    .addAdditionalProperty("dateLibrary", "java8");

// Generate with loaded configuration
ClientOptInput input = configurator.toClientOptInput();
new DefaultGenerator().opts(input).generate();

Example configuration file (config.json):

{
  "generatorName": "java",
  "inputSpec": "./openapi.yaml",
  "outputDir": "./generated",
  "apiPackage": "com.example.api",
  "modelPackage": "com.example.model",
  "additionalProperties": {
    "dateLibrary": "java8",
    "java8": "true",
    "hideGenerationTimestamp": "true"
  },
  "typeMappings": {
    "DateTime": "java.time.OffsetDateTime"
  }
}

Advanced Configuration

CodegenConfigurator configurator = new CodegenConfigurator()
    .setGeneratorName("spring")
    .setInputSpec("api-spec.yaml")
    .setOutputDir("./spring-server")
    .setApiPackage("com.example.controller")
    .setModelPackage("com.example.dto")
    .setInvokerPackage("com.example")
    
    // Library and framework options
    .setLibrary("spring-boot")
    .addAdditionalProperty("dateLibrary", "java8")
    .addAdditionalProperty("java8", "true")
    .addAdditionalProperty("interfaceOnly", "true")
    .addAdditionalProperty("skipDefaultInterface", "true")
    
    // Maven coordinates
    .setGroupId("com.example")
    .setArtifactId("petstore-api")
    .setArtifactVersion("1.0.0")
    
    // Type and import mappings
    .addTypeMapping("DateTime", "java.time.OffsetDateTime")
    .addImportMapping("OffsetDateTime", "java.time.OffsetDateTime")
    .addLanguageSpecificPrimitive("java.time.OffsetDateTime")
    
    // Generation control
    .setSkipOverwrite(false)
    .setRemoveOperationIdPrefix(true);

// Generate with advanced configuration
new DefaultGenerator().opts(configurator.toClientOptInput()).generate();

Custom CLI Options

public class MyCustomGenerator extends DefaultCodegen {
    
    public static final String USE_OPTIONAL = "useOptional";
    public static final String ASYNC_NATIVE = "asyncNative";
    
    public MyCustomGenerator() {
        super();
        
        // Add custom CLI options
        cliOptions.add(CliOption.newBoolean(USE_OPTIONAL, 
            "Use Optional container for optional parameters", false));
            
        cliOptions.add(CliOption.newString(ASYNC_NATIVE, 
            "Native async library to use")
            .addEnum("none", "No async support")
            .addEnum("completablefuture", "Use CompletableFuture")
            .addEnum("reactor", "Use Reactor")
            .defaultValue("none"));
    }
    
    @Override
    public void processOpts() {
        super.processOpts();
        
        // Process custom options
        if (additionalProperties.containsKey(USE_OPTIONAL)) {
            boolean useOptional = convertPropertyToBooleanAndWriteBack(USE_OPTIONAL);
            additionalProperties.put("useOptional", useOptional);
        }
        
        if (additionalProperties.containsKey(ASYNC_NATIVE)) {
            String asyncNative = (String) additionalProperties.get(ASYNC_NATIVE);
            additionalProperties.put("asyncNative", asyncNative);
            additionalProperties.put("isReactor", "reactor".equals(asyncNative));
        }
    }
}

Template Configuration

CodegenConfigurator configurator = new CodegenConfigurator()
    .setGeneratorName("java")
    .setInputSpec("openapi.yaml")
    .setOutputDir("./generated")
    .setTemplateDir("./custom-templates")  // Use custom templates
    
    // Additional properties for template customization
    .addAdditionalProperty("apiDocumentationUrl", "https://docs.example.com")
    .addAdditionalProperty("modelDocumentationUrl", "https://docs.example.com/models")
    .addAdditionalProperty("hideGenerationTimestamp", true)
    .addAdditionalProperty("serializationLibrary", "jackson");

// Custom user-defined templates can also be added
List<TemplateDefinition> userTemplates = Arrays.asList(
    new SupportingFile("custom-readme.mustache", "", "README.md"),
    new SupportingFile("dockerfile.mustache", "docker", "Dockerfile")
);

ClientOptInput input = configurator.toClientOptInput()
    .userDefinedTemplates(userTemplates);

new DefaultGenerator().opts(input).generate();

Constants

CodegenConstants

Static constants for common configuration keys.

class CodegenConstants {
    // System properties
    public static final String APIS = "apis";
    public static final String MODELS = "models";
    public static final String SUPPORTING_FILES = "supportingFiles";
    public static final String MODEL_TESTS = "modelTests";
    public static final String MODEL_DOCS = "modelDocs";
    public static final String API_TESTS = "apiTests";
    public static final String API_DOCS = "apiDocs";
    
    // Package configuration
    public static final String API_PACKAGE = "apiPackage";
    public static final String MODEL_PACKAGE = "modelPackage";
    public static final String INVOKER_PACKAGE = "invokerPackage";
    
    // Template configuration
    public static final String TEMPLATE_DIR = "templateDir";
    
    // Common options
    public static final String GROUP_ID = "groupId";
    public static final String ARTIFACT_ID = "artifactId";
    public static final String ARTIFACT_VERSION = "artifactVersion";
    public static final String LIBRARY = "library";
    public static final String GIT_USER_ID = "gitUserId";
    public static final String GIT_REPO_ID = "gitRepoId";
    
    // Behavior flags
    public static final String ALLOW_UNICODE_IDENTIFIERS = "allowUnicodeIdentifiers";
    public static final String REMOVE_OPERATION_ID_PREFIX = "removeOperationIdPrefix";
    public static final String SKIP_OVERWRITE = "skipOverwrite";
    public static final String HIDE_GENERATION_TIMESTAMP = "hideGenerationTimestamp";
}

Usage with Constants

CodegenConfigurator configurator = new CodegenConfigurator()
    .setGeneratorName("java")
    .setInputSpec("openapi.yaml")
    .setOutputDir("./generated")
    .addAdditionalProperty(CodegenConstants.HIDE_GENERATION_TIMESTAMP, true)
    .addAdditionalProperty(CodegenConstants.SKIP_OVERWRITE, false)
    .addAdditionalProperty(CodegenConstants.LIBRARY, "okhttp-gson");

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