com.yahoo.vespaxmlparser.VespaXMLReader Maven / Gradle / Ivy
The newest version!
// Copyright Vespa.ai. 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;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy