jaxb umarshalling проблема: не может получить атрибуты на пустых тегах XML - PullRequest
1 голос
/ 02 июля 2011

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

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

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

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

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

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

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

Wybrand.

Ответы [ 2 ]

1 голос
/ 05 июля 2011

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

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

Фрагмент Xml:

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

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

1 голос
/ 02 июля 2011

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

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

...