diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java |
Publish
Diffstat (limited to 'document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java')
-rw-r--r-- | document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLReader.java | 69 |
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; + } +} |