class SubversionAnnotationParser implements Executor.StreamHandler {
    private static final Logger LOGGER = LoggerFactory.getLogger(SubversionAnnotationParser.class);

    /**
     * Store annotation created by processStream.
     */
    private final Annotation annotation;

    private final String fileName;

    /**
     * @param fileName the name of the file being annotated
     */
    public SubversionAnnotationParser(String fileName) {
        annotation = new Annotation(fileName);
        this.fileName = fileName;
    }

    /**
     * Returns the annotation that has been created.
     *
     * @return annotation an annotation object
     */
    public Annotation getAnnotation() {
        return annotation;
    }

    @Override
    public void processStream(InputStream input) throws IOException {<FILL_FUNCTION_BODY>}

    private static class AnnotateHandler extends DefaultHandler2 {

        String rev;
        String author;
        final Annotation annotation;
        final StringBuilder sb;

        AnnotateHandler(String filename, Annotation annotation) {
            this.annotation = annotation;
            sb = new StringBuilder();
        }

        @Override
        public void startElement(String uri, String localName, String qname,
                Attributes attr) {
            sb.setLength(0);
            if ("entry".equals(qname)) {
                rev = null;
                author = null;
            } else if ("commit".equals(qname)) {
                rev = attr.getValue("revision");
            }
        }

        @Override
        public void endElement(String uri, String localName, String qname) {
            if ("author".equals(qname)) {
                author = sb.toString();
            } else if ("entry".equals(qname)) {
                annotation.addLine(rev, author, true);
            }
        }

        @Override
        public void characters(char[] arg0, int arg1, int arg2) {
            sb.append(arg0, arg1, arg2);
        }
    }
}

        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser;
        try {
            saxParser = factory.newSAXParser();
            saxParser.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); // Compliant
            saxParser.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); // compliant
        } catch (ParserConfigurationException | SAXException ex) {
            throw new IOException("Failed to create SAX parser", ex);
        }

        AnnotateHandler handler = new AnnotateHandler(fileName, annotation);
        try (BufferedInputStream in
                = new BufferedInputStream(input)) {
            saxParser.parse(in, handler);
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE,
                    "An error occurred while parsing the xml output", e);
        }
    
<no_super_class>