CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-apache-avro--avro-compiler

Compilers for Avro IDL and Avro Specific Java API - provides code generation tools for converting Avro schemas and IDL definitions into Java classes

Pending
Overview
Eval results
Files

schema-code-generation.mddocs/

Schema Code Generation

Core functionality for generating Java classes from Avro schemas, providing type-safe serialization and deserialization capabilities.

Capabilities

SpecificCompiler Class

Main compiler class for generating specific Java classes from Avro schemas.

/**
 * Generate specific Java interfaces and classes for protocols and schemas.
 * Java reserved keywords are mangled to preserve compilation.
 */
public class SpecificCompiler {
    
    /** Create compiler from single Schema */
    public SpecificCompiler(Schema schema);
    
    /** Create compiler from Schema collection */
    public SpecificCompiler(Collection<Schema> schemas);
    
    /** Create compiler from Schema iterable */
    public SpecificCompiler(Iterable<Schema> schemas);
}

Primary Compilation Methods

Core methods for compiling schemas to Java classes.

/**
 * Compile schema to destination directory
 * @param src Source schema file
 * @param dst Destination directory for generated classes
 * @throws IOException if compilation fails
 */
public void compileToDestination(File src, File dst) throws IOException;

/**
 * Compile single schema file to Java classes
 * @param src Source schema file
 * @param dest Destination directory
 * @throws IOException if compilation fails
 */
public static void compileSchema(File src, File dest) throws IOException;

/**
 * Compile multiple schema files to Java classes
 * @param srcFiles Array of source schema files
 * @param dest Destination directory
 * @throws IOException if compilation fails
 */
public static void compileSchema(File[] srcFiles, File dest) throws IOException;

Configuration Methods

Control various aspects of code generation behavior.

/** Check if all-args constructor should be created */
public boolean isCreateAllArgsConstructor();

/** Set additional Velocity template tools */
public void setAdditionalVelocityTools(List<Object> additionalVelocityTools);

/** Set custom template directory for code generation */
public void setTemplateDir(String templateDir);

/** Set file suffix for generated classes */
public void setSuffix(String suffix);

Field Configuration

Control field visibility and accessor generation.

/** Check if fields should be public */
public boolean publicFields();

/** Check if fields should be private */
public boolean privateFields();

/** Set field visibility (PUBLIC or PRIVATE) */
public void setFieldVisibility(FieldVisibility fieldVisibility);

/** Check if setters should be created */
public boolean isCreateSetters();

/** Enable/disable setter creation */
public void setCreateSetters(boolean createSetters);

Optional and Nullable Field Support

Configuration for optional getter methods and nullable field handling.

/** Check if null-safe annotations should be created */
public boolean isCreateNullSafeAnnotations();

/** Enable/disable null-safe annotations */
public void setCreateNullSafeAnnotations(boolean createNullSafeAnnotations);

/** Check if optional getters should be created */
public boolean isCreateOptionalGetters();

/** Enable/disable optional getters */
public void setCreateOptionalGetters(boolean createOptionalGetters);

/** Check if getters return Optional */
public boolean isGettersReturnOptional();

/** Configure Optional return types for getters */
public void setGettersReturnOptional(boolean gettersReturnOptional);

/** Check if optional getters are only for nullable fields */
public boolean isOptionalGettersForNullableFieldsOnly();

/** Configure optional getters scope to nullable fields only */
public void setOptionalGettersForNullableFieldsOnly(boolean optionalGettersForNullableFieldsOnly);

Logical Type Support

Support for Avro logical types and custom conversions.

/** Enable decimal logical type support */
public void setEnableDecimalLogicalType(boolean enableDecimalLogicalType);

/** Add custom logical type conversion class */
public void addCustomConversion(Class<?> conversionClass);

/** Get conversion classes used by schema */
public Collection<String> getUsedConversionClasses(Schema schema);

/** Get custom logical type factories used by schema */
public Map<String, String> getUsedCustomLogicalTypeFactories(Schema schema);

String Utilities

Static utility methods for Java code generation.

/** Escape string for Java code */
public static String javaEscape(String o);

/** Escape string for Javadoc */
public static String escapeForJavadoc(String s);

/** Convert null to empty string */
public static String nullToEmpty(String x);

/** Mangle identifier for Java (handle reserved words) */
public static String mangle(String word);

/** Mangle identifier with error flag */
public static String mangle(String word, boolean isError);

/** Mangle type identifier */
public static String mangleTypeIdentifier(String word);

/** Mangle type identifier with error flag */
public static String mangleTypeIdentifier(String word, boolean isError);

/** Mangle with custom reserved words */
public static String mangle(String word, Set<String> reservedWords);

/** Mangle with reserved words and method flag */
public static String mangle(String word, Set<String> reservedWords, boolean isMethod);

Usage Examples

Basic Schema Compilation

import org.apache.avro.Schema;
import org.apache.avro.compiler.specific.SpecificCompiler;
import java.io.File;

// Parse and compile a schema
Schema.Parser parser = new Schema.Parser();
Schema schema = parser.parse(new File("user.avsc"));

SpecificCompiler compiler = new SpecificCompiler(schema);
compiler.compileToDestination(new File("user.avsc"), new File("src/main/java"));

Multiple Schema Compilation

import org.apache.avro.compiler.specific.SpecificCompiler;
import java.io.File;

// Compile multiple schemas at once
File[] schemaFiles = {
    new File("user.avsc"),
    new File("order.avsc"),
    new File("product.avsc")
};

SpecificCompiler.compileSchema(schemaFiles, new File("src/main/java"));

Configured Compilation

import org.apache.avro.Schema;
import org.apache.avro.compiler.specific.SpecificCompiler;
import org.apache.avro.compiler.specific.SpecificCompiler.FieldVisibility;

Schema schema = new Schema.Parser().parse(new File("user.avsc"));
SpecificCompiler compiler = new SpecificCompiler(schema);

// Configure code generation
compiler.setFieldVisibility(FieldVisibility.PRIVATE);
compiler.setCreateSetters(true);
compiler.setCreateOptionalGetters(true);
compiler.setGettersReturnOptional(true);
compiler.setEnableDecimalLogicalType(true);

compiler.compileToDestination(new File("user.avsc"), new File("src/main/java"));

Custom Logical Type Conversion

import org.apache.avro.Conversions;
import org.apache.avro.data.TimeConversions;

SpecificCompiler compiler = new SpecificCompiler(schema);

// Add custom conversions for logical types
compiler.addCustomConversion(Conversions.DecimalConversion.class);
compiler.addCustomConversion(TimeConversions.DateConversion.class);
compiler.addCustomConversion(TimeConversions.TimeMillisConversion.class);

compiler.compileToDestination(schemaFile, outputDir);

Types

/** Field visibility options for generated classes */
public enum FieldVisibility {
    PUBLIC, PRIVATE
}

Install with Tessl CLI

npx tessl i tessl/maven-org-apache-avro--avro-compiler

docs

build-integration.md

configuration.md

index.md

protocol-code-generation.md

schema-code-generation.md

schema-utilities.md

tile.json