All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.retest.recheck.xml.XmlToRootConverter Maven / Gradle / Ivy

The newest version!
package de.retest.recheck.xml;

import java.io.InputStream;
import java.io.Reader;
import java.util.Collections;
import java.util.Set;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.XMLEvent;

import com.google.common.base.Charsets;

import de.retest.ui.descriptors.RootElement;

public class XmlToRootConverter {

	private static final XMLInputFactory inputFactory = XMLInputFactory.newInstance();

	public static Set toRootElement( final InputStream in ) throws XMLStreamException {
		return convert( inputFactory.createXMLEventReader( in, Charsets.UTF_8.name() ) );
	}

	public static Set toRootElement( final Reader in ) throws XMLStreamException {
		return convert( inputFactory.createXMLEventReader( in ) );
	}

	private static Set convert( final XMLEventReader eventReader ) throws XMLStreamException {
		if ( eventReader == null ) {
			return Collections.emptySet();
		}
		try {
			while ( eventReader.hasNext() ) {
				final XMLEvent event = eventReader.nextEvent();
				if ( event.isStartElement() ) {
					final XMLEventToRootElementConverter converter = new XMLEventToRootElementConverter( event );
					return Collections.singleton( (RootElement) converter.convert( eventReader ) );
				}
			}
			throw new RuntimeException("Couldn't identify start element in XML stream.");
		} finally {
			closeQuietly( eventReader );
		}
	}

	private static void closeQuietly( final XMLEventReader eventReader ) {
		try {
			eventReader.close();
		} catch ( final XMLStreamException e ) {
			// ignore
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy