JAXB Unmarshall создал пустой объект

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

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

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

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

4 ответов


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

unmarshaller.setEventHandler(
    new ValidationEventHandler() {
        public boolean handleEvent(ValidationEvent event ) {
            throw new RuntimeException(event.getMessage(),
                                       event.getLinkedException());
        }
});

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

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

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

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

2) Очистите и перестройте Это обязательно, чтобы очистить перед повторным созданием классов.


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

Посмотреть подробнее: в axis2-4981


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