Compilers for Avro IDL and Avro Specific Java API - provides code generation tools for converting Avro schemas and IDL definitions into Java classes
—
Core functionality for generating Java classes from Avro schemas, providing type-safe serialization and deserialization capabilities.
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);
}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;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);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);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);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);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);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"));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"));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"));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);/** 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