JAXB Binding Compiler (XJC) that generates Java classes from XML Schema definitions with both command-line and programmatic APIs
—
The JAXB XJC command-line interface provides comprehensive schema compilation capabilities for batch processing and build automation workflows.
Primary command-line execution entry points for XJC compilation.
/**
* Core CLI implementation with comprehensive execution options
*/
public final class Driver {
public static void main(String[] args) throws Exception;
public static int run(String[] args, PrintStream status, PrintStream out) throws Exception;
public static int run(String[] args, XJCListener listener) throws BadCommandLineException;
public static void usage(Options opts, boolean privateUsage);
public static String getBuildID();
}Usage Examples:
# Basic schema compilation
xjc schema.xsd
# Compile with specific package name
xjc -p com.example.generated schema.xsd
# Compile to specific output directory
xjc -d target/generated-sources schema.xsd
# Verbose output with warnings
xjc -verbose schema.xsd
# Multiple schema files
xjc schema1.xsd schema2.xsd schema3.xsd
# Using binding customization
xjc -b bindings.xjb schema.xsd
# Generate with episode file for separate compilation
xjc -episode generated.episode schema.xsdConfiguration class containing all command-line options and parsing logic.
/**
* Configuration and command-line options for XJC compilation
*/
public class Options {
// Core compilation options
public boolean debugMode;
public boolean verbose;
public boolean quiet;
public boolean readOnly;
public String encoding;
public File targetDir;
public String defaultPackage;
public Language schemaLanguage;
public int strictCheck;
public boolean packageLevelAnnotations;
public boolean automaticNameConflictResolution;
public Set<String> recognizedExtensions;
public List<Plugin> activePlugins;
// Parsing methods
public int parseArgument(String[] args, int i) throws BadCommandLineException;
public void parseArguments(String[] args) throws BadCommandLineException;
// Configuration methods
public FieldRendererFactory getFieldRendererFactory();
public void setFieldRendererFactory(FieldRendererFactory frf, Plugin owner);
public ClassLoader getUserClassLoader(ClassLoader parent);
public List<Plugin> getAllPlugins();
public CodeWriter createCodeWriter();
public CodeWriter createCodeWriter(CodeWriter core);
}XJC supports several execution modes for different use cases.
/**
* Extended options class with CLI-specific modes
*/
static class OptionsEx extends Options {
protected Mode mode;
public boolean noNS;
public int parseArgument(String[] args, int i) throws BadCommandLineException;
}
enum Mode {
CODE, // Normal code generation mode
SIGNATURE, // Dump signature of generated code
FOREST, // Dump DOM forest
DRYRUN, // Parse and validate but don't generate code
ZIP, // Pack all outputs into a zip
GBIND // Testing binding mode
}
/**
* Supported schema languages for XJC compilation
*/
public enum Language {
DTD("DTD", "dtd"),
XMLSCHEMA("XML Schema", "xsd"),
RELAXNG("RELAX NG", "rng"),
RELAXNG_COMPACT("RELAX NG (compact syntax)", "rnc"),
WSDL("WSDL", "wsdl");
public final String displayName;
public final String[] expectedExtensions;
Language(String displayName, String... expectedExtensions);
}Usage Examples:
# Generate code (default mode)
xjc schema.xsd
# Dry run - validate schema without generating code
xjc -mode dryrun schema.xsd
# Generate signature information
xjc -mode signature schema.xsd
# Package output as ZIP
xjc -mode zip schema.xsd
# Help and version information
xjc -help
xjc -version
xjc -fullversionProgress reporting system for long-running compilation tasks.
/**
* Abstract listener for compilation progress and error reporting
*/
public abstract class XJCListener extends ErrorReceiver {
public abstract void generatedFile(String fileName, int count, int total);
public abstract void message(String msg);
public void compiled(Outline outline);
public boolean isCanceled();
// Error handling from ErrorReceiver
public abstract void error(SAXParseException exception);
public abstract void warning(SAXParseException exception);
public abstract void info(SAXParseException exception);
public void pollAbort() throws AbortException;
}Usage Example:
// Custom listener for build tool integration
XJCListener listener = new XJCListener() {
@Override
public void generatedFile(String fileName, int count, int total) {
System.out.printf("Generated %s (%d of %d)%n", fileName, count, total);
}
@Override
public void message(String msg) {
System.out.println(msg);
}
@Override
public void error(SAXParseException exception) {
System.err.println("Error: " + exception.getMessage());
}
@Override
public void warning(SAXParseException exception) {
System.err.println("Warning: " + exception.getMessage());
}
@Override
public void info(SAXParseException exception) {
System.out.println("Info: " + exception.getMessage());
}
};
// Execute XJC with custom listener
int result = Driver.run(args, listener);Exception types specific to command-line processing.
/**
* Exception thrown when command line arguments are invalid
*/
public class BadCommandLineException extends Exception {
public BadCommandLineException();
public BadCommandLineException(String message);
public BadCommandLineException(String message, Throwable cause);
public void initOptions(Options opts);
public Options getOptions();
}Basic Schema Compilation:
xjc schema.xsdPackage and Output Control:
xjc -p com.example.generated -d src/main/java schema.xsdMultiple Schemas with Binding Customization:
xjc -b bindings.xjb schema1.xsd schema2.xsdPlugin Usage:
xjc -Xfluent-api schema.xsdEpisode Generation for Modular Compilation:
# First compilation generates episode
xjc -episode common.episode common.xsd
# Second compilation uses episode
xjc -extension common.episode specific.xsdQuiet Mode for Build Scripts:
xjc -quiet -d target/generated schema.xsdVerbose Debugging:
xjc -verbose -debug schema.xsdInstall with Tessl CLI
npx tessl i tessl/maven-org-glassfish-jaxb--jaxb-xjc