package uk.kludje.test.sample; import javax.xml.stream.*; import javax.xml.stream.events.XMLEvent; import javax.xml.transform.Result; import javax.xml.transform.Source; import java.util.function.UnaryOperator; public class XmlEventProcessorVerbose { private final XMLInputFactory inputFactory; private final XMLOutputFactory outputFactory; public XmlEventProcessorVerbose(XMLInputFactory inputFactory, XMLOutputFactory outputFactory) { this.inputFactory = inputFactory; this.outputFactory = outputFactory; } public void consumeEvents(Source source, Result result, UnaryOperator<XMLEvent> consumer) { try { XMLEventReader reader = inputFactory.createXMLEventReader(source); try { XMLEventWriter writer = outputFactory.createXMLEventWriter(result); try { while (reader.hasNext()) { XMLEvent event = reader.nextEvent(); event = consumer.apply(event); writer.add(event); } } finally { writer.close(); } } finally { reader.close(); } } catch (XMLStreamException e) { throw new UncheckedXMLStreamException(e); } } public static class UncheckedXMLStreamException extends RuntimeException { public UncheckedXMLStreamException(XMLStreamException e) { super(e); } } }