baseURI = baseURI.substring("file:/".length());
if (!baseURI.startsWith("//")) baseURI = "//" + baseURI;
baseURI = "file:/" + baseURI;
}
// System.out.println("baseURI: " + baseURI);
Document doc = new Builder().build(file);
byte[] data = codec.serialize(doc, compressionLevel);
if (!cmd.equals("test")) doc = new BinaryXMLCodec().deserialize(data); // use "interned" strings
byte[] fileData = FileUtil.toByteArray(new FileInputStream(file));
long fileLength = file.length();
int encodedSize = 0;
org.w3c.dom.Document domDoc = null;
if (mode.equals("dom")) {
domDoc = domBuilder.parse(file);
}
NodeInfo saxonDoc = null;
if (mode.equals("saxon")) {
saxonDoc = context.buildDocument(new StreamSource(new ByteArrayInputStream(fileData)));
}
if (mode.startsWith("fi")) {
if (mode.indexOf("stax") >= 0) {
// data = serializeWithStax(doc, staxOutputFactory);
data = serializeWithFastInfosetStax(doc, (XMLStreamWriter)fiSerializer, fiMethod, new ByteArrayOutputStream());
} else {
data = serializeWithFastInfoset(doc, (ContentHandler)fiSerializer, fiMethod, new ByteArrayOutputStream());
}
}
// run the benchmark
long start = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
try {
// serialize
if (cmd.equals("ser") || cmd.equals("serdeser") || cmd.equals("test")) {
ByteArrayOutputStream out = createOutputStream(cmd.equals("ser"));
if (mode.startsWith("bnux")) {
if (mode.indexOf("stream") < 0) {
codec.serialize(doc, compressionLevel, out);
data = out.toByteArray();
} else {
data = serializeWithStreamingBnux(doc, compressionLevel, out);
}
} else if (mode.startsWith("xom")) {
if (mode.indexOf("stax") >= 0) {
data = serializeWithStax(doc, staxOutputFactory, out);
} else if (mode.indexOf("stream") < 0) {
data = serializeWithXOM(doc, out);
} else {
data = serializeWithStreamingXOM(doc, out);
}
} else if (mode.equals("saxon")) {
saxonSerializer.transform(saxonDoc, new StreamResult(out));
data = out.toByteArray();
} else if (mode.equals("dom")) {
domSerializer.transform(new DOMSource(domDoc), new StreamResult(out));
data = out.toByteArray();
} else if (mode.startsWith("fi")) {
if (mode.indexOf("stax") >= 0) {
// data = serializeWithStax(doc, staxOutputFactory);
data = serializeWithFastInfosetStax(doc, (XMLStreamWriter)fiSerializer, fiMethod, out);
} else {
data = serializeWithFastInfoset(doc, (ContentHandler)fiSerializer, fiMethod, out);
}
} else {
throw new IllegalArgumentException("illegal mode");
}
checksum += data.length;
}
encodedSize = data.length;
doneEncoded += encodedSize;
// deserialize
Document doc2 = null;
if (cmd.equals("deser") || cmd.equals("serdeser") || cmd.equals("test")) {
if (mode.startsWith("bnux")) {
doc2 = codec.deserialize(new ByteArrayInputStream(data), bnuxFactory);
} else if (mode.startsWith("xom") && mode.indexOf("stax") >= 0) {
doc2 = staxBuilder.build(new ByteArrayInputStream(fileData));
} else if (mode.startsWith("xom")) {
if (mode.indexOf("stream") < 0) {
doc2 = builder.build(new ByteArrayInputStream(fileData), baseURI);
} else {
doc2 = builder.build(new ByteArrayInputStream(data), baseURI);
}
} else if (mode.equals("saxon")) { // just for deser comparison
context.buildDocument(new StreamSource(new ByteArrayInputStream(fileData)));
} else if (mode.equals("dom")) {
domDoc = domBuilder.parse(new ByteArrayInputStream(fileData));
// System.err.println(domDoc.getClass().getName());
} else if (mode.startsWith("fi") && mode.indexOf("stax") >=0 ) {
fistaxMethod.invoke(fistaxReader, new Object[] {new ByteArrayInputStream(data)});
// doc2 = staxBuilder.build(fistaxReader);
doc2 = new StaxParser(fistaxReader, staxBuilder.getNodeFactory()).build();
} else if (mode.startsWith("fi")) {
doc2 = fiBuilder.build(new ByteArrayInputStream(data));
} else {
throw new IllegalArgumentException("illegal mode");
}
if (doc2 != null) checksum += doc2.getBaseURI().length();
}
// check correctness
if (cmd.equals("test")) {
IOTestUtil.xomAssertEquals(doc, doc2);
IOTestUtil.canonicalAssertEquals(doc, doc2);
// if (! Arrays.equals(XOMUtil.toCanonicalXML(doc), XOMUtil.toCanonicalXML(doc2))) {
// System.err.println("Canonical XML Mismatch: ");
// System.err.println("expected: " + doc.toXML());
// System.err.println("actual: " + doc2.toXML());
// printDiff(doc, doc2);
// System.exit(0);
// }
if (!equalsDocTypeEquals(doc.getDocType(), doc2.getDocType())) {
System.err.println("DocType Mismatch: ");
System.err.println("expected: " + doc.toXML());
System.err.println("actual: " + doc2.toXML());
System.exit(0);
}
}
} catch (RuntimeException e) {
System.err.println("FATAL ERROR: " + e);