summaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java')
-rw-r--r--document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java69
1 files changed, 69 insertions, 0 deletions
diff --git a/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java b/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java
new file mode 100644
index 00000000000..10c3676a965
--- /dev/null
+++ b/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java
@@ -0,0 +1,69 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespaxmlparser;
+
+import com.yahoo.document.DocumentTypeManager;
+import com.yahoo.document.serialization.DeserializationException;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+/**
+ * @author thomasg
+ */
+public class VespaXMLReader {
+ DocumentTypeManager docTypeManager;
+ XMLStreamReader reader;
+
+ public VespaXMLReader(String fileName, DocumentTypeManager docTypeManager) throws Exception {
+ this(new FileInputStream(fileName), docTypeManager);
+ }
+
+ public VespaXMLReader(InputStream stream, DocumentTypeManager docTypeManager) throws Exception {
+ this.docTypeManager = docTypeManager;
+ XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
+ xmlInputFactory.setProperty("javax.xml.stream.isSupportingExternalEntities", Boolean.FALSE);
+ reader = xmlInputFactory.createXMLStreamReader(stream);
+ }
+
+ public VespaXMLReader(XMLStreamReader reader, DocumentTypeManager docTypeManager) {
+ this.docTypeManager = docTypeManager;
+ this.reader = reader;
+ }
+
+ protected RuntimeException newDeserializeException(String message) {
+ return new DeserializationException(message + " (at line " + reader.getLocation().getLineNumber() + ", column " + reader.getLocation().getColumnNumber() + ")");
+ }
+
+ protected RuntimeException newException(Exception e) {
+ return new DeserializationException(e.getMessage() + " (at line " + reader.getLocation().getLineNumber() + ", column " + reader.getLocation().getColumnNumber() + ")", e);
+ }
+
+ protected void skipToEnd(String tagName) throws XMLStreamException {
+ while (reader.hasNext()) {
+ if (reader.getEventType() == XMLStreamReader.END_ELEMENT && tagName.equals(reader.getName().toString())) {
+ return;
+ }
+ reader.next();
+ }
+ throw new DeserializationException("Missing end tag for element '" + tagName + "'" + reader.getLocation());
+ }
+
+ public static boolean isBase64EncodingAttribute(String attributeName, String attributeValue) {
+ return "binaryencoding".equals(attributeName) &&
+ "base64".equalsIgnoreCase(attributeValue);
+ }
+
+ public static boolean isBase64EncodedElement(XMLStreamReader reader) {
+ for (int i = 0; i < reader.getAttributeCount(); i++) {
+ if (isBase64EncodingAttribute(reader.getAttributeName(i).toString(),
+ reader.getAttributeValue(i)))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}