diff options
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/util/XmlParser.java')
-rwxr-xr-x | src/main/java/io/trygvis/esper/testing/util/XmlParser.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/util/XmlParser.java b/src/main/java/io/trygvis/esper/testing/util/XmlParser.java new file mode 100755 index 0000000..e1b463f --- /dev/null +++ b/src/main/java/io/trygvis/esper/testing/util/XmlParser.java @@ -0,0 +1,66 @@ +package io.trygvis.esper.testing.util; + +import fj.data.*; +import static fj.data.Option.*; +import static javax.xml.stream.XMLStreamConstants.*; +import org.h2.util.*; +import org.jdom2.*; +import org.jdom2.input.*; + +import java.io.*; +import javax.xml.stream.*; + +public class XmlParser { + public static boolean debugXml; + + private final XMLInputFactory xmlInputFactory; + + private final StAXStreamBuilder streamBuilder = new StAXStreamBuilder(); + + public XmlParser() { + xmlInputFactory = XMLInputFactory.newFactory(); + } + + public Option<Document> parseDocument(InputStream stream) { + + try { + if (debugXml) { + // TODO: Pretty print + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + IOUtils.copy(stream, buffer); + byte[] bytes = buffer.toByteArray(); + System.out.println("------------------------------------------------"); + System.out.write(bytes); + System.out.println(); + System.out.println("------------------------------------------------"); + stream = new ByteArrayInputStream(bytes); + } + + // https://github.com/hunterhacker/jdom/issues/101 + XMLStreamReader readerX = xmlInputFactory.createXMLStreamReader(stream); + + XMLStreamReader reader = xmlInputFactory.createFilteredReader(readerX, new StreamFilter() { + + boolean seenStartDocument; + + @Override + public boolean accept(XMLStreamReader reader) { + if(reader.getEventType() == SPACE && !seenStartDocument) { + return false; + } + + if(reader.getEventType() == START_DOCUMENT) { + seenStartDocument = false; + } + + return true; + } + }); + + return some(streamBuilder.build(reader)); + } catch (Exception e) { + e.printStackTrace(); + return none(); + } + } +} |