JAXB Unmarshall создал пустой объект - PullRequest
21 голосов
/ 14 апреля 2010

Я использую JAXB для демонтажа XML-файла в дерево объектов. Корневой объект не равен NULL, но все его члены имеют значение NULL, хотя в XML-файле есть данные. Мои классы объектов были созданы с помощью Axis2 из wsdls. У меня есть класс ObjectFactory, класс jaxb.index, аннотация package.info и т. Д.

Моя проблема такая же, как в этом обсуждении: http://old.nabble.com/AXIS2,-JAXB---Unmarshalling-td26847419.html

Прежде всего: есть ли способ заставить его правильно заполнить данные?

Если нет, то есть ли хорошая библиотека-заменитель для Axis2 или JAXB, которая делает то же самое, но прекрасно сочетается друг с другом?

Ответы [ 4 ]

53 голосов
/ 07 июля 2010

JAXB по умолчанию игнорирует ошибки. Я не вижу никакой причины, почему это конфигурация по умолчанию. Попробуйте добавить этот код, чтобы вызвать исключение, если что-то пойдет не так.

unmarshaller.setEventHandler(
    new ValidationEventHandler() {
        public boolean handleEvent(ValidationEvent event ) {
            throw new RuntimeException(event.getMessage(),
                                       event.getLinkedException());
        }
});
1 голос
/ 08 июня 2011

Недавно у меня была похожая проблема, и я смог ее исправить, как показано ниже:

1) Исправление файла xsd. В моем случае я обеспечил, чтобы все сложные элементы в xsd ссылались на свой соответствующий тип, используя атрибут ref, вместо того, чтобы объявлять их атрибутом type.

Я проверил, правильно ли работает мой xsd, создав опцию XML-файла из файла XML-схемы в Eclipse.

До исправления корневой элемент в XML-файле был пустым. После исправления xsd был правильно создан xml с некоторыми примерами значений.

2) очистить и восстановить Перед повторной генерацией классов необходимо выполнить очистку.

0 голосов
/ 19 июня 2012

Файл package-info.java должен быть скомпилирован. Eclipse должен найти все файлы .java и скомпилировать их. Если компиляция из командной строки и позволить javac искать зависимости, он НЕ найдет его. Затем при запуске вы получите пустые объекты. Похоже, ошибка в JAXB, по крайней мере, не импортировать этот файл куда-нибудь. И ошибка должна указывать вам на возможную компиляцию этого файла.

0 голосов
/ 29 марта 2011

Просто хочу добавить, что когда Axis2 используется вместе с Rampart (шифрование SOAP Body) и JAXB, эта проблема возникает всегда.

Подробнее см .: AXIS2-4981

...