Как отлаживать JAXB unmarshalling? - PullRequest
14 голосов
/ 06 января 2012

У меня проблема с демонтажем JAXB.Я думаю, что я правильно его кодировал, но мой не маршалированный объект возвращается с нулевыми параметрами.Следовательно, я предполагаю, что при демаршировании JAXB не видит подходящую структуру XML, которую он ожидает.Тем не менее, я не получаю никаких сообщений об ошибках или каких-либо исключений.

Есть ли какой-либо способ пройти через процесс демаршаллинга, чтобы точно определить, где / почему не удается заполнить мой объект (ы)?

Фактический код демаршаллинга довольно приземленный:

public <T> T unmarshall(Node node, Class<T> clazz) throws JAXBException {
    // Creating an unmarshaller
    Unmarshaller u = JAXBContext.newInstance(clazz).createUnmarshaller();

    // unmarshal an instance node into  Java content
    return clazz.cast(u.unmarshal(node, clazz).getValue());
}

Однако, когда я его вызываю, я получаю объект типа clazz, возвращенный (как и ожидалось), но не заселенный.

DOMобъект, который я пытаюсь разобрать, создается сторонним API.Я уже сталкивался с некоторыми очень странными поведениями с unmarshalling, поэтому я хотел бы иметь возможность отладить процесс.Например, если я пытаюсь демонтировать подэлемент в объекте DOM (то есть: doc.getByElementName ("myElement"). Item (0)), он молча завершается неудачей.Однако, если я преобразую документ в строку и повторно импортирую его в новый документ, он преобразует его в порядке.

Я начинаю разочаровываться, не зная, как решить эту проблему.

Спасибо за любые идеи!

Эрик

Ответы [ 2 ]

11 голосов
/ 26 февраля 2014
JAXBContext context = JAXBContext.newInstance(jaxbObjectClass);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
7 голосов
/ 06 января 2012

Один из подходов, который вы можете использовать, - это использовать JAXB для генерации XML-схемы из ваших аннотированных классов. Это представляет то, что JAXB ожидает, что входной документ будет выглядеть. Затем проверьте ваш XML-документ по этой XML-схеме, чтобы проверить, соответствует ли он ожиданиям JAXB.

...