Execute the specified command. This logic only performs the common
attribute validation required by all subclasses; it does not perform
any functional logic directly.
if (path == null) {
throw new BuildException("Must specify 'path'");
}
File file = new File(path, Constants.ApplicationWebXml);
if ((!file.exists()) || (!file.canRead())) {
throw new BuildException("Cannot find web.xml");
}
// Commons-logging likes having the context classloader set
ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader
(ValidatorTask.class.getClassLoader());
Digester digester = DigesterFactory.newDigester(true, true, null);
try {
file = file.getCanonicalFile();
InputStream stream =
new BufferedInputStream(new FileInputStream(file));
InputSource is = new InputSource(file.toURL().toExternalForm());
is.setByteStream(stream);
digester.parse(is);
handleOutput("web.xml validated");
} catch (Throwable t) {
if (isFailOnError()) {
throw new BuildException("Validation failure", t);
} else {
handleErrorOutput("Validation failure: " + t);
}
} finally {
Thread.currentThread().setContextClassLoader(oldCL);
closeRedirector();
}