in src/main/java/org/apache/xmlbeans/impl/tool/SchemaCompiler.java [597:771]
public static boolean compile(Parameters params) {
File baseDir = params.getBaseDir();
File[] xsdFiles = params.getXsdFiles();
File[] wsdlFiles = params.getWsdlFiles();
URL[] urlFiles = params.getUrlFiles();
File[] javaFiles = params.getJavaFiles();
File[] configFiles = params.getConfigFiles();
File[] classpath = params.getClasspath();
File outputJar = params.getOutputJar();
String name = params.getName();
File srcDir = params.getSrcDir();
File classesDir = params.getClassesDir();
String compiler = params.getCompiler();
String memoryInitialSize = params.getMemoryInitialSize();
String memoryMaximumSize = params.getMemoryMaximumSize();
boolean nojavac = params.isNojavac();
boolean debug = params.isDebug();
boolean verbose = params.isVerbose();
boolean quiet = params.isQuiet();
boolean download = params.isDownload();
boolean noUpa = params.isNoUpa();
boolean noPvr = params.isNoPvr();
boolean noAnn = params.isNoAnn();
boolean noVDoc = params.isNoVDoc();
boolean noExt = params.isNoExt();
boolean incrSrcGen = params.isIncrementalSrcGen();
boolean copyAnn = params.isCopyAnn();
String sourceCodeEncoding = params.getSourceCodeEncoding();
Collection<XmlError> outerErrorListener = params.getErrorListener();
Set<BeanMethod> partialMethods = params.getPartialMethods();
String repackage = params.getRepackage();
if (repackage != null) {
SchemaTypeLoaderImpl.METADATA_PACKAGE_LOAD = SchemaTypeSystemImpl.METADATA_PACKAGE_GEN;
Repackager repackager = new Repackager(repackage);
StringBuffer sb = new StringBuffer(SchemaTypeLoaderImpl.METADATA_PACKAGE_LOAD);
sb = repackager.repackage(sb);
SchemaTypeSystemImpl.METADATA_PACKAGE_GEN = sb.toString();
System.out.println("SchemaCompiler Metadata LOAD:" + SchemaTypeLoaderImpl.METADATA_PACKAGE_LOAD + " GEN:" + SchemaTypeSystemImpl.METADATA_PACKAGE_GEN);
}
SchemaCodePrinter codePrinter = params.getSchemaCodePrinter();
List<Extension> extensions = params.getExtensions();
Set<String> mdefNamespaces = params.getMdefNamespaces();
EntityResolver cmdLineEntRes = params.getEntityResolver() == null ?
ResolverUtil.resolverForCatalog(params.getCatalogFile()) : params.getEntityResolver();
if (srcDir == null || classesDir == null) {
throw new IllegalArgumentException("src and class gen directories may not be null.");
}
long start = System.currentTimeMillis();
// Calculate the basenames based on the relativized filenames on the filesystem
if (baseDir == null) {
String userDir = SystemProperties.getProperty("user.dir");
assert (userDir != null);
baseDir = new File(userDir);
}
ResourceLoader cpResourceLoader = null;
Map<String, String> sourcesToCopyMap = new HashMap<>();
if (classpath != null) {
cpResourceLoader = new PathResourceLoader(classpath);
}
boolean result = true;
File schemasDir = IOUtil.createDir(classesDir, SchemaTypeSystemImpl.METADATA_PACKAGE_GEN + "/src");
// build the in-memory type system
XmlErrorWatcher errorListener = new XmlErrorWatcher(outerErrorListener);
SchemaTypeSystem system = loadTypeSystem(name, xsdFiles, wsdlFiles, urlFiles, configFiles,
javaFiles, cpResourceLoader, download, noUpa, noPvr, noAnn, noVDoc, noExt, sourceCodeEncoding, mdefNamespaces,
baseDir, sourcesToCopyMap, errorListener, schemasDir, cmdLineEntRes, classpath);
if (errorListener.hasError()) {
result = false;
}
long finish = System.currentTimeMillis();
if (!quiet) {
System.out.println("Time to build schema type system: " + ((double) (finish - start) / 1000.0) + " seconds");
}
// now code generate and compile the JAR
if (result && system != null) // todo: don't check "result" here if we want to compile anyway, ignoring invalid schemas
{
start = System.currentTimeMillis();
// filer implementation writes binary .xsd and generated source to disk
Repackager repackager = (repackage == null ? null : new Repackager(repackage));
FilerImpl filer = new FilerImpl(classesDir, srcDir, repackager, verbose, incrSrcGen);
// currently just for schemaCodePrinter
XmlOptions options = new XmlOptions();
if (codePrinter != null) {
options.setSchemaCodePrinter(codePrinter);
}
options.setCompilePartialMethod(partialMethods);
options.setCompileNoAnnotations(noAnn);
options.setCompileAnnotationAsJavadoc(copyAnn);
options.setCharacterEncoding(sourceCodeEncoding);
// save .xsb files
system.save(filer);
// gen source files
result = SchemaTypeSystemCompiler.generateTypes(system, filer, options);
if (incrSrcGen) {
// We have to delete extra source files that may be out of date
SchemaCodeGenerator.deleteObsoleteFiles(srcDir, srcDir,
new HashSet<>(filer.getSourceFiles()));
}
if (result) {
finish = System.currentTimeMillis();
if (!quiet) {
System.out.println("Time to generate code: " + ((double) (finish - start) / 1000.0) + " seconds");
}
}
// compile source
if (result && !nojavac) {
start = System.currentTimeMillis();
List<File> sourcefiles = filer.getSourceFiles();
if (javaFiles != null) {
sourcefiles.addAll(java.util.Arrays.asList(javaFiles));
}
if (!CodeGenUtil.externalCompile(sourcefiles, classesDir, classpath, debug, compiler, null,
memoryInitialSize, memoryMaximumSize, quiet, verbose, sourceCodeEncoding)) {
result = false;
}
finish = System.currentTimeMillis();
if (result && !params.isQuiet()) {
System.out.println("Time to compile code: " + ((double) (finish - start) / 1000.0) + " seconds");
}
// jar classes and .xsb
if (result && outputJar != null) {
try {
new JarHelper().jarDir(classesDir, outputJar);
} catch (IOException e) {
System.err.println("IO Error " + e);
result = false;
}
if (result && !params.isQuiet()) {
System.out.println("Compiled types to: " + outputJar);
}
}
}
}
if (!result && !quiet) {
System.out.println("BUILD FAILED");
} else {
// call schema compiler extension if registered
runExtensions(extensions, system, classesDir);
}
if (cpResourceLoader != null) {
cpResourceLoader.close();
}
return result;
}