public FeedResponse handle(InputStreamRequest request, RouteMetricSet.ProgressCallback callback, int numThreads) {
        MessagePropertyProcessor.PropertySetter properties = getPropertyProcessor().buildPropertySetter(request);

        String route = properties.getRoute().toString();
        FeedResponse response = new FeedResponse(new RouteMetricSet(route, callback));

        SingleSender sender = new SingleSender(response, getSharedSender(route));
        sender.addMessageProcessor(properties);
        ThreadedFeedAccess feedAccess = new ThreadedFeedAccess(numThreads, sender);
        Feeder feeder = createFeeder(feedAccess, request);
        feeder.setAbortOnDocumentError(properties.getAbortOnDocumentError());
        feeder.setCreateIfNonExistent(properties.getCreateIfNonExistent());
        response.setAbortOnFeedError(properties.getAbortOnFeedError());

        List<String> errors = feeder.parse();
        for (String s : errors) {
            response.addXMLParseError(s);
        }

        sender.done();
        feedAccess.close();
        long millis = getTimeoutMillis(request);
        boolean completed = sender.waitForPending(millis);
        if (!completed) {
            response.addError(new Error(ErrorCode.TIMEOUT, "Timed out after " + millis + " ms waiting for responses"));
        }
        response.done();
        return response;

    }
Feed documents from a com.yahoo.container.handler.Request.

@author Thomas Gundersen
@author steinar
vespaclient-core/src/main/java/com/yahoo/feedhandler/VespaFeedHandler.java