Как добавить атрибуты в корневой элемент, когда класс генерируется JAXB?

Я разрабатываю REST API, который использует Spring MVC. Объекты, которые я потребляю и создаю, генерируются (используя JAXB) из XSD-файлов NCPDP ( http://www.ncpdp.org/). У меня все работает, когда поступают запросы, но я хотел бы добавить дополнительные атрибуты к корневому элементу при исходящих запросах.

Прямо сейчас мой исходящий ответ выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transport:Message xmlns:transport="http://www.ncpdp.org/schema/transport">
    <transport:Header>
        ...
    </transport:Header>
    <transport:Body>
        <transport:Status>
            <transport:Code>010</transport:Code>
            <transport:Description>OK</transport:Description>
        </transport:Status>
    </transport:Body>
</transport:Message>

И это должно выглядеть следующим образом:

<?xml version="1.0"?>
<transport:Message xmlns:transport="http://www.ncpdp.org/schema/transport" xmlns:datatypes="http://www.ncpdp.org/schema/datatypes" 
    xmlns:script="http://www.ncpdp.org/schema/script" xmlns:structures="http://www.ncpdp.org/schema/structures" 
    xmlns:pa-structures="http://www.ncpdp.org/schema/pa-structures" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    StructuresVersion="v2014041" ECLVersion="v2014041" DatatypesVersion="v2014041" PA-StructuresVersion="v2014041" 
    TransactionVersion="v2014041" TransportVersion="v2014041" TransactionDomain="SCRIPT">
  <transport:Header>
    ...
  </transport:Header>
  <transport:Body>
    <transport:Status>
      <transport:Code>010</transport:Code>
    </transport:Status>
  </transport:Body>
</transport:Message>

Я не верю, что мне нужны все определенные пространства имен (поскольку они не используются), но мне нужны StructuresVersion и все другие атрибуты. Есть ли способ изменить мой bindings.xjb, чтобы включить эти атрибуты? Или я должен скопировать сгенерированный код в мое дерево исходников и добавить аннотации для этого?

Спасибо,

Matt

1 ответ

Решение

Поскольку эти атрибуты объявлены в вашей XML-схеме, вы должны получить соответствующие свойства в своем коде, производном от схемы.

На самом деле не имеет значения, является ли это корневым элементом или каким-либо дочерним элементом. Пожалуйста, перепроверьте сгенерированный код, ищите что-то вроде getStructuresVersion(), Так что вам не нужно ничего делать.

Что касается пространств имен, вы получите их автоматически объявленные, когда вы маршалируете. Но вы можете сначала объявить их ns0, ns1 и т.д., что не очень приятно с точки зрения читабельности. Пожалуйста, смотрите следующий вопрос:

Управление префиксами пространства имен в JAXB

(сам вопрос, а не ответы) для получения информации о том, как управлять этими префиксами с помощью специального сопоставления префиксов, или этот пост Блеза Дафана.

Другие вопросы по тегам