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, чтобы не импортировать этот файл где-то. И ошибка должна сказать вам, чтобы вы могли скомпилировать этот файл.