локатор событий проверки jaxb - номер строки и столбца ошибки проверки - PullRequest
2 голосов
/ 04 января 2011

При выполнении маршалинга 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;
    }

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Это ожидаемое поведение.Когда вы выполняете маршалинг, источником ошибки является маршалируемый объект.Объект можно также найти по событию.

Для получения дополнительной информации см .:

1 голос
/ 04 января 2011

Какой столбец и номер строки (в каком файле) вы ожидаете получить?Я думаю, что это по замыслу.Номер строки и номер столбца предназначены для события ValidationEvent, которые происходят при отмене сортировки.В таком случае вы получаете положение проблемы в XML-файле, которое будет не маршалируемым.

Но в вашем случае вы пытаетесь маршалировать объект - следовательно, нет XML-файла, и поэтому вы не получаетестолбец или номер строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...