проблем с umarshalling на jaxb: не мога да получа атрибутите на празни xml тагове

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

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

Интересувам се от атрибутите.

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

Възможно заобиколно решение: да се даде на всеки елемент стойност по подразбиране (""), когато е null, като се обвърже към адаптер с помощта на bindings-file. Но успях да направя това само за прости типове.

Използвани версии: ние използваме изпълнението на jaxb в Java 1.6

Много благодаря.

Wybrand.


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


Отговори (2)


Тъй като няма стойност по подразбиране за XML атрибути, бих внедрил кода за инициализация в метода afterUnmarshal. Там можете да проверите всички атрибути, които ви интересуват, и да ги зададете на валидна ненулева стойност.

За подробности как да използвате afterUnmarshal вижте: Как мога да накарам JAXB да извика метод, след като е завършил демаршалирането на XML файл в обект?

person Robert    schedule 02.07.2011

Реших проблема. Но проблемът не беше JAXB.

Страната, която изпраща xml, който трябва да умаршали, поставя „нулево пространство от имена“ в декларацията на елемента.

Xml фрагмент:

Елементът id има в декларацията си xmlns="". (Предполагам, че това е грешка) и основният маркер има декларацията xmlns:ns3="urn:hl7-org:v3"

Поради тази причина (мисля) jaxb unmarshaller не вижда id елемента като част от съобщението.

person wyp    schedule 05.07.2011