in src/main/java/org/apache/struts/annotations/taglib/apt/TagAnnotationProcessor.java [277:342]
private void saveAsXml() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
// create xml document
builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
document.setXmlVersion("1.0");
// taglib
Element tagLib = document.createElement("taglib");
tagLib.setAttribute("xmlns", "http://java.sun.com/xml/ns/j2ee");
tagLib.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
tagLib.setAttribute("xsi:schemaLocation", "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd");
tagLib.setAttribute("version", getOption("jspVersion"));
document.appendChild(tagLib);
// tag lib attributes
appendTextNode(document, tagLib, "description",
getOption("description"), true);
appendTextNode(document, tagLib, "display-name",
getOption("displayName"), false);
appendTextNode(document, tagLib, "tlib-version",
getOption("tlibVersion"), false);
appendTextNode(document, tagLib, "short-name",
getOption("shortName"), false);
appendTextNode(document, tagLib, "uri", getOption("uri"), false);
// create tags
for (Map.Entry<String, Tag> entry : tags.entrySet()) {
Tag tag = entry.getValue();
if (tag.isInclude())
createElement(document, tagLib, tag);
}
// save to file
TransformerFactory tf = TransformerFactory.newInstance();
tf.setAttribute("indent-number", 2);
Transformer transformer = tf.newTransformer();
// if tiger would just format it :(
// formatting bug in tiger
// (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446)
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
//create output directory if it does not exists
String outFile = getOption("outFile");
if (outFile == null) {
throw new IllegalArgumentException("outFile was not defined!");
}
File outputFile = new File(outFile);
File parentDir = outputFile.getParentFile();
if (!parentDir.exists()) {
if (!parentDir.mkdirs()) {
throw new IllegalStateException("Cannot create folder: " + parentDir.getPath() + "!");
}
}
Source source = new DOMSource(document);
Result result = new StreamResult(new OutputStreamWriter(Files.newOutputStream(outputFile.toPath())));
transformer.transform(source, result);
} catch (Exception e) {
// oops we cannot throw checked exceptions
throw new RuntimeException(e);
}
}