use of com.yahoo.feedapi.XMLFeeder in project vespa by vespa-engine.
the class VespaFeedHandler method handle.
public HttpResponse handle(HttpRequest request, RouteMetricSet.ProgressCallback callback) {
if (request.getProperty("status") != null) {
return new MetricResponse(context.getMetrics().getMetricSet());
}
try {
int busy = busyThreads.incrementAndGet();
if (busy > maxBusyThreads)
return new EmptyResponse(com.yahoo.jdisc.http.HttpResponse.Status.SERVICE_UNAVAILABLE);
boolean asynchronous = request.getBooleanProperty("asynchronous");
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), !asynchronous);
sender.addMessageProcessor(properties);
sender.addMessageProcessor(new DocprocMessageProcessor(getDocprocChain(request), getDocprocServiceRegistry(request)));
Feeder feeder = createFeeder(sender, 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);
}
if (errors.size() > 0 && feeder instanceof XMLFeeder) {
response.addXMLParseError("If you are trying to feed JSON, set the Content-Type header to application/json.");
}
sender.done();
if (asynchronous) {
return response;
}
long millis = getTimeoutMillis(request);
boolean completed = sender.waitForPending(millis);
if (!completed) {
response.addError(Error.TIMEOUT, "Timed out after " + millis + " ms waiting for responses");
}
response.done();
return response;
} finally {
busyThreads.decrementAndGet();
}
}
Aggregations