public void execute()

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