// Path: src/main/java/nl/ulso/sprox/XmlProcessor.java
// public interface XmlProcessor<T> {
// 
//     /**
//      * Process XML by pulling it from a reader. The reader is not closed. If buffering is needed, this must be
//      * provided by the caller.
//      *
//      * @param reader The reader to pull the XML from.
//      * @return The result of processing the XML; is {@code null} only if {@code T} is {@link java.lang.Void}.
//      * @throws XmlProcessorException If an error occurred while processing the XML
//      */
//     T execute(Reader reader) throws XmlProcessorException;
// 
//     /**
//      * Process XML by pulling it from an input stream. The input stream is not closed. If buffering is needed, this
//      * must be provided by the caller.
//      *
//      * @param inputStream The stream to pull the XML from.
//      * @return The result of processing the XML; is {@code null} only if {@code T} is {@link java.lang.Void}.
//      * @throws XmlProcessorException If an error occurred while processing the XML
//      */
//     T execute(InputStream inputStream) throws XmlProcessorException;
// }
// 
// Path: src/main/java/nl/ulso/sprox/impl/StaxBasedXmlProcessorBuilderFactory.java
// public class StaxBasedXmlProcessorBuilderFactory implements XmlProcessorBuilderFactory {
//     @Override
//     public <T> XmlProcessorBuilder<T> createXmlProcessorBuilder(Class<T> resultClass) {
//         return new StaxBasedXmlProcessorBuilder<>(resultClass);
//     }
// }
// 
// Path: src/test/java/nl/ulso/sprox/opml/Outline.java
// public class Outline extends Element {
//     private final DateTime creationDate;
//     private final DateTime modificationDate;
// 
//     public Outline(String title, DateTime creationDate, DateTime modificationDate, List<Element> elements) {
//         super(title, Optional.of(elements));
//         this.creationDate = creationDate;
//         this.modificationDate = modificationDate;
//     }
// 
//     public String getTitle() {
//         return getText();
//     }
// 
//     public DateTime getCreationDate() {
//         return creationDate;
//     }
// 
//     public DateTime getModificationDate() {
//         return modificationDate;
//     }
// 
//     @Override
//     public void accept(Visitor visitor) {
//         visitor.visit(this);
//         for (Element element : this) {
//             element.accept(visitor);
//         }
//     }
// }
// 
// Path: src/test/java/nl/ulso/sprox/opml/OutlineFactory.java
// public class OutlineFactory {
// 
//     @Node
//     public Outline opml(@Node String title, @Node DateTime dateCreated,
//                         @Node DateTime dateModified, List<Element> elements) {
//         return new Outline(title, dateCreated, dateModified, elements);
//     }
// 
//     @Recursive
//     @Node
//     public Element outline(@Attribute String text, Optional<List<Element>> elements) {
//         return new Element(text, elements);
//     }
// }
// 
// Path: src/test/java/nl/ulso/sprox/opml/Rfc822DateTimeParser.java
// public class Rfc822DateTimeParser implements Parser<DateTime> {
// 
//     // Not sure if this pattern is completely correct, but all dates in the test data are parsed correctly.
//     private static final DateTimeFormatter parser = DateTimeFormat.forPattern("EEE, dd MMM YYYY HH:mm:ss ZZZ");
// 
//     public DateTime fromString(String value) throws ParseException {
//         try {
//             return parser.parseDateTime(value);
//         } catch (IllegalArgumentException e) {
//             throw new ParseException(DateTime.class, value, e);
//         }
//     }
// }


import nl.ulso.sprox.XmlProcessor;
import nl.ulso.sprox.impl.StaxBasedXmlProcessorBuilderFactory;
import nl.ulso.sprox.opml.Outline;
import nl.ulso.sprox.opml.OutlineFactory;
import nl.ulso.sprox.opml.Rfc822DateTimeParser;
import org.junit.Test;
import javax.xml.stream.*;
import javax.xml.stream.util.XMLEventAllocator;
import javax.xml.transform.Source;
import java.io.InputStream;
import java.io.Reader;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
                return null;
            }

            @Override
            public XMLStreamReader createXMLStreamReader(String systemId, InputStream stream) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLStreamReader createXMLStreamReader(String systemId, Reader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(Reader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(String systemId, Reader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(XMLStreamReader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(Source source) throws XMLStreamException {
// Path: src/main/java/nl/ulso/sprox/XmlProcessor.java
// public interface XmlProcessor<T> {
// 
//     /**
//      * Process XML by pulling it from a reader. The reader is not closed. If buffering is needed, this must be
//      * provided by the caller.
//      *
//      * @param reader The reader to pull the XML from.
//      * @return The result of processing the XML; is {@code null} only if {@code T} is {@link java.lang.Void}.
//      * @throws XmlProcessorException If an error occurred while processing the XML
//      */
//     T execute(Reader reader) throws XmlProcessorException;
// 
//     /**
//      * Process XML by pulling it from an input stream. The input stream is not closed. If buffering is needed, this
//      * must be provided by the caller.
//      *
//      * @param inputStream The stream to pull the XML from.
//      * @return The result of processing the XML; is {@code null} only if {@code T} is {@link java.lang.Void}.
//      * @throws XmlProcessorException If an error occurred while processing the XML
//      */
//     T execute(InputStream inputStream) throws XmlProcessorException;
// }
// 
// Path: src/main/java/nl/ulso/sprox/impl/StaxBasedXmlProcessorBuilderFactory.java
// public class StaxBasedXmlProcessorBuilderFactory implements XmlProcessorBuilderFactory {
//     @Override
//     public <T> XmlProcessorBuilder<T> createXmlProcessorBuilder(Class<T> resultClass) {
//         return new StaxBasedXmlProcessorBuilder<>(resultClass);
//     }
// }
// 
// Path: src/test/java/nl/ulso/sprox/opml/Outline.java
// public class Outline extends Element {
//     private final DateTime creationDate;
//     private final DateTime modificationDate;
// 
//     public Outline(String title, DateTime creationDate, DateTime modificationDate, List<Element> elements) {
//         super(title, Optional.of(elements));
//         this.creationDate = creationDate;
//         this.modificationDate = modificationDate;
//     }
// 
//     public String getTitle() {
//         return getText();
//     }
// 
//     public DateTime getCreationDate() {
//         return creationDate;
//     }
// 
//     public DateTime getModificationDate() {
//         return modificationDate;
//     }
// 
//     @Override
//     public void accept(Visitor visitor) {
//         visitor.visit(this);
//         for (Element element : this) {
//             element.accept(visitor);
//         }
//     }
// }
// 
// Path: src/test/java/nl/ulso/sprox/opml/OutlineFactory.java
// public class OutlineFactory {
// 
//     @Node
//     public Outline opml(@Node String title, @Node DateTime dateCreated,
//                         @Node DateTime dateModified, List<Element> elements) {
//         return new Outline(title, dateCreated, dateModified, elements);
//     }
// 
//     @Recursive
//     @Node
//     public Element outline(@Attribute String text, Optional<List<Element>> elements) {
//         return new Element(text, elements);
//     }
// }
// 
// Path: src/test/java/nl/ulso/sprox/opml/Rfc822DateTimeParser.java
// public class Rfc822DateTimeParser implements Parser<DateTime> {
// 
//     // Not sure if this pattern is completely correct, but all dates in the test data are parsed correctly.
//     private static final DateTimeFormatter parser = DateTimeFormat.forPattern("EEE, dd MMM YYYY HH:mm:ss ZZZ");
// 
//     public DateTime fromString(String value) throws ParseException {
//         try {
//             return parser.parseDateTime(value);
//         } catch (IllegalArgumentException e) {
//             throw new ParseException(DateTime.class, value, e);
//         }
//     }
// }


// Path: src/test/java/nl/ulso/sprox/inputfactory/CustomXmlInputFactoryTest.java
import nl.ulso.sprox.XmlProcessor;
import nl.ulso.sprox.impl.StaxBasedXmlProcessorBuilderFactory;
import nl.ulso.sprox.opml.Outline;
import nl.ulso.sprox.opml.OutlineFactory;
import nl.ulso.sprox.opml.Rfc822DateTimeParser;
import org.junit.Test;
import javax.xml.stream.*;
import javax.xml.stream.util.XMLEventAllocator;
import javax.xml.transform.Source;
import java.io.InputStream;
import java.io.Reader;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;

                return null;
            }

            @Override
            public XMLStreamReader createXMLStreamReader(String systemId, InputStream stream) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLStreamReader createXMLStreamReader(String systemId, Reader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(Reader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(String systemId, Reader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(XMLStreamReader reader) throws XMLStreamException {
                return null;
            }

            @Override
            public XMLEventReader createXMLEventReader(Source source) throws XMLStreamException {
                return null;