import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.w3c.dom.Document;
import org.w3c.dom.DOMException;
public class jvmtiGen
{
private static final int EXIT_FAILURE_ERROR = 1;
private static final int EXIT_FAILURE_BADARGUMENTS = 2;
private static boolean verbose = false;
private static void showUsage() {
System.err.println("usage:");
System.err.println(" java jvmtiGen " +
"[-verbose] " +
"-IN <input XML file name> " +
"-XSL <XSL file> " +
"-OUT <output file name> " +
"[-PARAM <name> <expression> ...]");
System.exit(EXIT_FAILURE_BADARGUMENTS);
}
public static void main (String argv []) {
String inFileName = null;
String xslFileName = null;
String outFileName = null;
final List<String> params = new ArrayList<String>();
for (int ii = 0; ii < argv.length; ii++) {
if (argv[ii].equals("-verbose")) {
verbose = true;
} else if (argv[ii].equals("-IN")) {
inFileName = argv[++ii];
} else if (argv[ii].equals("-XSL")) {
xslFileName = argv[++ii];
} else if (argv[ii].equals("-OUT")) {
outFileName = argv[++ii];
} else if (argv[ii].equals("-PARAM")) {
if (ii + 2 < argv.length) {
final String name = argv[++ii];
params.add(name);
final String expression = argv[++ii];
params.add(expression);
} else {
showUsage();
}
} else {
showUsage();
}
}
if (inFileName == null || xslFileName == null || outFileName == null) {
showUsage();
}
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setXIncludeAware(true);
final File datafile = new File(inFileName);
final File stylesheet = new File(xslFileName);
try (
final OutputStream os = new BufferedOutputStream(new FileOutputStream(outFileName));
) {
final StreamSource stylesource = new StreamSource(stylesheet);
final Transformer transformer =
TransformerFactory.newInstance().newTransformer(stylesource);
for (int ii = 0; ii < params.size(); ii += 2) {
transformer.setParameter(params.get(ii), params.get(ii + 1));
}
final DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(new ErrorHandler() {
public void fatalError(SAXParseException exn) throws SAXException {
throw new SAXException(exn);
}
public void error(SAXParseException exn) throws SAXException {
fatalError(exn);
}
public void warning(SAXParseException exn) throws SAXException {
if (verbose) {
System.err.println("jvmtiGen warning: " + exn.getMessage());
}