}
try {
tracker.startElement(namespaceURI, localName, qName);
} catch (XPathException e) {
throw new ExtendedSAXParseException(
"Could not process startElement event",
locator,
e);
} catch (IllegalStateException e) {
// This situation can arise because validation now depends upon
// obtaining the list of child elements and iterating over them
// rather than explicitly searching for children using xpath. As
// a result it is possible that the list of children is out of date
// for example if two quick editions occur that change the children.
// This is not a problem because the IllegalStateException merely
// indicates that the document being validated is out of date and
// therefore does not need to be validated as it is no longer
// current. In this situation parsing should be terminated by
// throwing a TerminateParsingException and specifically catching
// this and ignoring it high.
terminateValidation();
throw new TerminateParsingException("Document out-of-date");
}
// Report any "supplementary" errors before any validation errors.
// This is because we currently throw away (!) any errors after the
// first one which occurs for each xpath and the supplementary errors
// are higher level than the schema validation errors.
try {
invokeSupplementaryValidators(namespaceURI, localName);
} catch (XPathException e) {
throw new ExtendedSAXParseException(
"Could not process endElement event",
locator,
e);
}