aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/esper/testing/util/XmlParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/util/XmlParser.java')
-rwxr-xr-xsrc/main/java/io/trygvis/esper/testing/util/XmlParser.java66
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();
+ }
+ }
+}