use of org.apache.tools.ant.BuildException in project ant by apache.
the class AntXMLContext method setBuildFile.
/**
* sets the build file to which the XML context belongs
* @param buildFile ant build file
*/
public void setBuildFile(File buildFile) {
this.buildFile = buildFile;
if (buildFile != null) {
this.buildFileParent = new File(buildFile.getParent());
implicitTarget.setLocation(new Location(buildFile.getAbsolutePath()));
try {
setBuildFile(FileUtils.getFileUtils().getFileURL(buildFile));
} catch (MalformedURLException ex) {
throw new BuildException(ex);
}
} else {
this.buildFileParent = null;
}
}
use of org.apache.tools.ant.BuildException in project ant by apache.
the class ProjectHelper2 method parse.
/**
* Parses the project file, configuring the project as it goes.
*
* @param project the current project
* @param source the xml source
* @param handler the root handler to use (contains the current context)
* @exception BuildException if the configuration is invalid or cannot
* be read
*/
public void parse(Project project, Object source, RootHandler handler) throws BuildException {
AntXMLContext context = handler.context;
File buildFile = null;
URL url = null;
String buildFileName = null;
if (source instanceof File) {
buildFile = (File) source;
} else if (source instanceof URL) {
url = (URL) source;
} else if (source instanceof Resource) {
FileProvider fp = ((Resource) source).as(FileProvider.class);
if (fp != null) {
buildFile = fp.getFile();
} else {
URLProvider up = ((Resource) source).as(URLProvider.class);
if (up != null) {
url = up.getURL();
}
}
}
if (buildFile != null) {
buildFile = FILE_UTILS.normalize(buildFile.getAbsolutePath());
context.setBuildFile(buildFile);
buildFileName = buildFile.toString();
} else if (url != null) {
try {
context.setBuildFile((File) null);
context.setBuildFile(url);
} catch (java.net.MalformedURLException ex) {
throw new BuildException(ex);
}
buildFileName = url.toString();
} else {
throw new BuildException("Source " + source.getClass().getName() + " not supported by this plugin");
}
InputStream inputStream = null;
InputSource inputSource = null;
ZipFile zf = null;
try {
/**
* SAX 2 style parser used to parse the given file.
*/
XMLReader parser = JAXPUtils.getNamespaceXMLReader();
String uri = null;
if (buildFile != null) {
uri = FILE_UTILS.toURI(buildFile.getAbsolutePath());
inputStream = Files.newInputStream(buildFile.toPath());
} else {
uri = url.toString();
int pling = -1;
if (uri.startsWith("jar:file") && (pling = uri.indexOf("!/")) > -1) {
zf = new ZipFile(org.apache.tools.ant.launch.Locator.fromJarURI(uri), "UTF-8");
inputStream = zf.getInputStream(zf.getEntry(uri.substring(pling + 2)));
} else {
URLConnection conn = url.openConnection();
conn.setUseCaches(false);
inputStream = conn.getInputStream();
}
}
inputSource = new InputSource(inputStream);
if (uri != null) {
inputSource.setSystemId(uri);
}
project.log("parsing buildfile " + buildFileName + " with URI = " + uri + (zf != null ? " from a zip file" : ""), Project.MSG_VERBOSE);
DefaultHandler hb = handler;
parser.setContentHandler(hb);
parser.setEntityResolver(hb);
parser.setErrorHandler(hb);
parser.setDTDHandler(hb);
parser.parse(inputSource);
} catch (SAXParseException exc) {
Location location = new Location(exc.getSystemId(), exc.getLineNumber(), exc.getColumnNumber());
Throwable t = exc.getException();
if (t instanceof BuildException) {
BuildException be = (BuildException) t;
if (be.getLocation() == Location.UNKNOWN_LOCATION) {
be.setLocation(location);
}
throw be;
}
throw new BuildException(exc.getMessage(), t == null ? exc : t, location);
} catch (SAXException exc) {
Throwable t = exc.getException();
if (t instanceof BuildException) {
throw (BuildException) t;
}
throw new BuildException(exc.getMessage(), t == null ? exc : t);
} catch (FileNotFoundException exc) {
throw new BuildException(exc);
} catch (UnsupportedEncodingException exc) {
throw new BuildException("Encoding of project file " + buildFileName + " is invalid.", exc);
} catch (IOException exc) {
throw new BuildException("Error reading project file " + buildFileName + ": " + exc.getMessage(), exc);
} finally {
FileUtils.close(inputStream);
ZipFile.closeQuietly(zf);
}
}
use of org.apache.tools.ant.BuildException in project ant by apache.
the class ProjectHelper2 method parseUnknownElement.
/**
* Parse an unknown element from a url
*
* @param project the current project
* @param source the url containing the task
* @return a configured task
* @exception BuildException if an error occurs
*/
public UnknownElement parseUnknownElement(Project project, URL source) throws BuildException {
Target dummyTarget = new Target();
dummyTarget.setProject(project);
AntXMLContext context = new AntXMLContext(project);
context.addTarget(dummyTarget);
context.setImplicitTarget(dummyTarget);
parse(context.getProject(), source, new RootHandler(context, elementHandler));
Task[] tasks = dummyTarget.getTasks();
if (tasks.length != 1) {
throw new BuildException("No tasks defined");
}
return (UnknownElement) tasks[0];
}
use of org.apache.tools.ant.BuildException in project ant by apache.
the class ProjectHelperImpl method parse.
/**
* Parses the project file, configuring the project as it goes.
*
* @param project project instance to be configured.
* @param source the source from which the project is read.
* @exception BuildException if the configuration is invalid or cannot
* be read.
*/
public void parse(Project project, Object source) throws BuildException {
if (!(source instanceof File)) {
throw new BuildException("Only File source supported by " + "default plugin");
}
File bFile = (File) source;
InputStream inputStream = null;
InputSource inputSource = null;
this.project = project;
this.buildFile = new File(bFile.getAbsolutePath());
buildFileParent = new File(this.buildFile.getParent());
try {
try {
parser = JAXPUtils.getParser();
} catch (BuildException e) {
parser = new XMLReaderAdapter(JAXPUtils.getXMLReader());
}
String uri = FILE_UTILS.toURI(bFile.getAbsolutePath());
inputStream = Files.newInputStream(bFile.toPath());
inputSource = new InputSource(inputStream);
inputSource.setSystemId(uri);
project.log("parsing buildfile " + bFile + " with URI = " + uri, Project.MSG_VERBOSE);
HandlerBase hb = new RootHandler(this);
parser.setDocumentHandler(hb);
parser.setEntityResolver(hb);
parser.setErrorHandler(hb);
parser.setDTDHandler(hb);
parser.parse(inputSource);
} catch (SAXParseException exc) {
Location location = new Location(exc.getSystemId(), exc.getLineNumber(), exc.getColumnNumber());
Throwable t = exc.getException();
if (t instanceof BuildException) {
BuildException be = (BuildException) t;
if (be.getLocation() == Location.UNKNOWN_LOCATION) {
be.setLocation(location);
}
throw be;
}
throw new BuildException(exc.getMessage(), t, location);
} catch (SAXException exc) {
Throwable t = exc.getException();
if (t instanceof BuildException) {
throw (BuildException) t;
}
throw new BuildException(exc.getMessage(), t);
} catch (FileNotFoundException exc) {
throw new BuildException(exc);
} catch (UnsupportedEncodingException exc) {
throw new BuildException("Encoding of project file is invalid.", exc);
} catch (IOException exc) {
throw new BuildException("Error reading project file: " + exc.getMessage(), exc);
} finally {
FileUtils.close(inputStream);
}
}
use of org.apache.tools.ant.BuildException in project ant by apache.
the class DefaultInputHandler method handleInput.
/**
* Prompts and requests input. May loop until a valid input has
* been entered.
* @param request the request to handle
* @throws BuildException if not possible to read from console
*/
public void handleInput(InputRequest request) throws BuildException {
String prompt = getPrompt(request);
BufferedReader r = null;
boolean success = false;
try {
r = new BufferedReader(new InputStreamReader(getInputStream()));
do {
System.err.println(prompt);
System.err.flush();
try {
String input = r.readLine();
request.setInput(input);
} catch (IOException e) {
throw new BuildException("Failed to read input from" + " Console.", e);
}
} while (!request.isInputValid());
success = true;
} finally {
if (r != null) {
try {
r.close();
} catch (IOException e) {
if (success) {
// NOSONAR
throw new BuildException("Failed to close input.", e);
}
}
}
}
}
Aggregations