in src/main/java/org/apache/xmlbeans/impl/tool/XMLBean.java [101:314]
public void execute() throws BuildException {
/* VALIDATION */
//required
if (schemas.isEmpty()
&& schema == null
&& fileset.getDir(getProject()) == null) {
String msg = "The 'schema' or 'dir' attribute or a nested fileset is required.";
if (failonerror) {
throw new BuildException(msg);
} else {
log(msg, Project.MSG_ERR);
return;
}
}
_extRouter.put(XSD, new HashSet<>());
_extRouter.put(WSDL, new HashSet<>());
_extRouter.put(JAVA, new HashSet<>());
_extRouter.put(XSDCONFIG, new HashSet<>());
File theBasedir = schema;
if (schema != null) {
if (schema.isDirectory()) {
FileScanner scanner = getDirectoryScanner(schema);
String[] paths = scanner.getIncludedFiles();
processPaths(paths, scanner.getBasedir());
} else {
theBasedir = schema.getParentFile();
processPaths(new String[]{schema.getName()}, theBasedir);
}
}
if (fileset.getDir(getProject()) != null) {
schemas.add(fileset);
}
for (FileSet fs : schemas) {
FileScanner scanner = fs.getDirectoryScanner(getProject());
File basedir = scanner.getBasedir();
String[] paths = scanner.getIncludedFiles();
processPaths(paths, basedir);
}
Set<File> xsdList = _extRouter.get(XSD);
Set<File> wsdlList = _extRouter.get(WSDL);
if (xsdList.isEmpty() && wsdlList.isEmpty()) {
log("Could not find any xsd or wsdl files to process.", Project.MSG_WARN);
return;
}
//optional
Set<File> javaList = _extRouter.get(JAVA);
Set<File> xsdconfigList = _extRouter.get(XSDCONFIG);
if (srcgendir == null && srconly) {
srcgendir = classgendir;
}
if (destfile == null && classgendir == null && !srconly) {
destfile = new File("xmltypes.jar");
}
if (verbose) {
quiet = false;
}
/* EXECUTION */
File[] xsdArray = xsdList.toArray(new File[0]);
File[] wsdlArray = wsdlList.toArray(new File[0]);
File[] javaArray = javaList.toArray(new File[0]);
File[] xsdconfigArray = xsdconfigList.toArray(new File[0]);
ErrorLogger err = new ErrorLogger(verbose);
boolean success = false;
try {
// create a temp directory
File tmpdir = null;
if (srcgendir == null || classgendir == null) {
tmpdir = SchemaCodeGenerator.createTempDir();
}
if (srcgendir == null) {
srcgendir = IOUtil.createDir(tmpdir, "src");
}
if (classgendir == null) {
classgendir = IOUtil.createDir(tmpdir, "classes");
}
// use the system classpath if user didn't provide any
if (classpath == null) {
classpath = new Path(getProject());
classpath.concatSystemClasspath();
}
// prepend the output directory on the classpath
Path.PathElement pathElement = classpath.createPathElement();
pathElement.setLocation(classgendir);
String[] paths = classpath.list();
File[] cp = new File[paths.length];
for (int i = 0; i < paths.length; i++) {
cp[i] = new File(paths[i]);
}
// generate the source
Parameters params = new Parameters();
params.setBaseDir(theBasedir);
params.setXsdFiles(xsdArray);
params.setWsdlFiles(wsdlArray);
params.setJavaFiles(javaArray);
params.setConfigFiles(xsdconfigArray);
params.setClasspath(cp);
params.setName(typesystemname);
params.setSrcDir(srcgendir);
params.setClassesDir(classgendir);
params.setNojavac(true); // always compile using javac task below
params.setDebug(debug);
params.setVerbose(verbose);
params.setQuiet(quiet);
params.setDownload(download);
params.setExtensions(extensions);
params.setErrorListener(err);
params.setCatalogFile(catalog);
params.setIncrementalSrcGen(noSrcRegen);
params.setMdefNamespaces(mdefnamespaces);
params.setNoUpa(noupa);
params.setNoPvr(nopvr);
params.setNoAnn(noann);
params.setNoVDoc(novdoc);
params.setNoExt(noext);
params.setRepackage(repackage);
params.setPartialMethods(SchemaCompiler.parsePartialMethods(partialMethods));
success = SchemaCompiler.compile(params);
if (success && !srconly) {
long start = System.currentTimeMillis();
// compile the source
Javac javac = new Javac();
javac.setProject(getProject());
javac.setTaskName(getTaskName());
javac.setClasspath(classpath);
if (compiler != null) {
javac.setCompiler(compiler);
}
javac.setDebug(debug);
if (debugLevel != null) {
javac.setDebugLevel(debugLevel);
}
javac.setDestdir(classgendir);
javac.setExecutable(forkedExecutable);
javac.setFailonerror(failonerror);
javac.setFork(fork);
javac.setSource("1.8");
javac.setTarget("1.8");
javac.setIncludeantruntime(includeAntRuntime);
javac.setIncludejavaruntime(includeJavaRuntime);
javac.setNowarn(nowarn);
javac.setSrcdir(new Path(getProject(), srcgendir.getAbsolutePath()));
if (memoryInitialSize != null) {
javac.setMemoryInitialSize(memoryInitialSize);
}
if (memoryMaximumSize != null) {
javac.setMemoryMaximumSize(memoryMaximumSize);
}
javac.setOptimize(optimize);
javac.setVerbose(verbose);
javac.execute();
long finish = System.currentTimeMillis();
if (!quiet) {
log("Time to compile code: " + ((double) (finish - start) / 1000.0) + " seconds");
}
if (destfile != null) {
// jar the compiled classes
Jar jar = new Jar();
jar.setProject(getProject());
jar.setTaskName(getTaskName());
jar.setBasedir(classgendir);
jar.setDestFile(destfile);
jar.execute();
}
}
if (tmpdir != null) {
SchemaCodeGenerator.tryHardToDelete(tmpdir);
}
} catch (BuildException e) {
// re-throw anything thrown from javac or jar task
throw e;
} catch (Throwable e) {
//interrupted means cancel
if (e instanceof InterruptedException || failonerror) {
throw new BuildException(e);
}
if (ExceptionUtil.isFatal(e)) {
ExceptionUtil.rethrow(e);
}
log("Exception while building schemas: " + e.getMessage(), Project.MSG_ERR);
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
log(sw.toString(), Project.MSG_VERBOSE);
}
if (!success && failonerror) {
throw new BuildException(); //stop the build
}
}