package uk.kludje.test.sample; import uk.kludje.Res; 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; import static uk.kludje.Res.res; public class XmlEventProcessor { private final XMLInputFactory inputFactory; private final XMLOutputFactory outputFactory; public XmlEventProcessor(XMLInputFactory inputFactory, XMLOutputFactory outputFactory) { this.inputFactory = inputFactory; this.outputFactory = outputFactory; } public void consumeEvents(Source source, Result result, UnaryOperator<XMLEvent> eventProcessor) { try (Res<XMLEventReader> reader = res(XMLEventReader::close, inputFactory.createXMLEventReader(source)); Res<XMLEventWriter> writer = res(XMLEventWriter::close, outputFactory.createXMLEventWriter(result))) { while (reader.unwrap().hasNext()) { XMLEvent event = reader.unwrap().nextEvent(); event = eventProcessor.apply(event); writer.unwrap().add(event); } } catch (XMLStreamException e) { throw new UncheckedXMLStreamException(e); } } public static class UncheckedXMLStreamException extends RuntimeException { public UncheckedXMLStreamException(XMLStreamException e) { super(e); } } }