Подтвердить что ты не робот

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

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

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

В первую очередь: есть ли способ заставить его правильно заполнить данные?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

2) очистить и перестроить Обязательно очищать до повторного создания классов.

Ответ 3

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

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

Ответ 4

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

Ответ 5

Я столкнулся с этой проблемой, когда файлы xsd, которые использовались для создания кода Java, имели ссылки на недостижимые URL-адреса.

К счастью, все эти ссылки появились в файлах package-info.java поэтому мне пришлось добавить задачу antRun после задачи xjc которая их удалила.