CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-glassfish-jaxb--jaxb-xjc

JAXB Binding Compiler (XJC) that generates Java classes from XML Schema definitions with both command-line and programmatic APIs

Pending
Overview
Eval results
Files

cli.mddocs/

Command Line Interface (CLI)

The JAXB XJC command-line interface provides comprehensive schema compilation capabilities for batch processing and build automation workflows.

Capabilities

Main Entry Points

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.xsd

CLI Options Configuration

Configuration 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);
}

Command Line Execution Modes

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 -fullversion

Progress and Status Reporting

Progress 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 Handling

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();
}

Common CLI Patterns

Basic Schema Compilation:

xjc schema.xsd

Package and Output Control:

xjc -p com.example.generated -d src/main/java schema.xsd

Multiple Schemas with Binding Customization:

xjc -b bindings.xjb schema1.xsd schema2.xsd

Plugin Usage:

xjc -Xfluent-api schema.xsd

Episode Generation for Modular Compilation:

# First compilation generates episode
xjc -episode common.episode common.xsd

# Second compilation uses episode
xjc -extension common.episode specific.xsd

Quiet Mode for Build Scripts:

xjc -quiet -d target/generated schema.xsd

Verbose Debugging:

xjc -verbose -debug schema.xsd

Install with Tessl CLI

npx tessl i tessl/maven-org-glassfish-jaxb--jaxb-xjc

docs

build-integration.md

cli.md

code-generation.md

error-handling.md

index.md

plugin-system.md

programmatic-api.md

tile.json