public List<String> parse() {
        FeedReader reader;

        try {
            reader = createReader();
        } catch (Exception e) {
            addError("ERROR: " + e.getClass().toString() + ": " + e.getMessage().replaceAll("\"", "'"));
            return errors;
        }

        while (!sender.isAborted()) {
            try {
                FeedOperation op = reader.read();
                if (createIfNonExistent) {
                    if (op.getDocumentUpdate() != null) {
                        op.getDocumentUpdate().setCreateIfNonExistent(true);
                    }
                    if (op.getDocumentPut() != null) {
                        op.getDocumentPut().setCreateIfNonExistent(true);
                    }
                }
                if (op.getType() == FeedOperation.Type.INVALID) break; // Done feeding
                sender.sendOperation(op);
            } catch (XMLStreamException | NullPointerException e) {
                addException(e);
                break;
            } catch (Exception e) {
                addException(e);
                if (doAbort) {
                    break;
                }
            }
        }

        return errors;
    }
Base class for unpacking document operation streams and pushing to feed
access points.

@author Thomas Gundersen
@author steinar
vespaclient-core/src/main/java/com/yahoo/feedapi/Feeder.java