При выполнении маршалинга JAXB я собираю ошибку проверки, а также хочу получить номер строки и номер столбца, где происходит ошибка.Я продолжаю получать columnNumber = -1 и lineNumber = -1 для всех ошибок.Я что-то забываю?
Пример кода:
Marshaller marshaler = jaxbCtx.createMarshaller();
marshaler.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
ValidationErrorCollector errorCollector = new ValidationErrorCollector();
marshaler.setEventHandler(errorCollector);
marshaler.setSchema(getSchema());
marshaler.setProperty("com.sun.xml.bind.namespacePrefixMapper", new MyNamespacePrefixMapper());
JAXBElement<RootObject> jaxbElement = new JAXBElement<RootObject>(ROOT_QNAME, RootObject.class, (RootObject) rootObject);
marshaler.marshal(jaxbElement, new StringWriter());
for (ValidationEvent validationEvent : errorCollector.getValidationEvents()) {
validationEvent.getLocator().getColumnNumber(); // returns -1
validationEvent.getLocator().getLineNumber(); // returns -1
...
public class ValidationErrorCollector implements ValidationEventHandler {
/** List of validation events (with validation errors). */
private List<ValidationEvent> validationEvents = new ArrayList<ValidationEvent>();
@Override
public boolean handleEvent(ValidationEvent validationEvent) {
// record the validation error
validationEvents.add(validationEvent);
// let validation continue
return true;
}