Проблема jaxb umarshalling: невозможно получить атрибуты пустых тегов xml

Мне нужно преобразовать строку xml-soap в объект Java с помощью JAXB. XML содержит много пустых тегов с заполненными атрибутами, например, большая часть информации в сообщении передается следующим образом:

<ID code="123" codeSystem="12.12.12"/>

Меня интересуют атрибуты.

Проблема: если я проверяю объект после десортировки, все пустые теги (например, приведенные выше) не имеют представления (например, являются нулевыми) в объекте Java. К объекту Java были добавлены только заполненные теги (например, 123). Возможно, такое поведение соответствует стандартам xml, но меня все еще интересуют атрибуты. Может ли кто-нибудь сказать мне, есть ли способ получить атрибуты ??

Возможный обходной путь: присвоить каждому элементу значение по умолчанию (""), когда он равен нулю, привязав его к адаптеру с помощью файла привязок. Но мне удалось это сделать только для простых типов.

Используемые версии: мы используем реализацию jaxb в Java 1.6.

Большое спасибо.

Бренд.


person wyp    schedule 02.07.2011    source источник


Ответы (2)


Поскольку для атрибутов XML нет значения по умолчанию, я бы реализовал код инициализации в методе afterUnmarshal. Там вы можете проверить все интересующие вас атрибуты и установить для них допустимое ненулевое значение.

Подробнее об использовании afterUnmarshal см.: Как сделать так, чтобы JAXB вызывал метод после завершения преобразования файла XML в объект?

person Robert    schedule 02.07.2011

Я решил проблему. Но проблема была не в JAXB.

Сторона, которая отправляет xml, который я должен umarshall, помещает «нулевое пространство имен» в объявление элемента.

XML-фрагмент:

Элемент id имеет в своем объявлении xmlns="". (Я предполагаю, что это ошибка), а корневой тег имеет объявление xmlns:ns3="urn:hl7-org:v3"

По этой причине (я думаю) jaxb unmarshaller не видит элемент id как часть сообщения.

person wyp    schedule 05.07.2011