Как добавить атрибуты в корневой элемент, когда класс генерируется 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
(сам вопрос, а не ответы) для получения информации о том, как управлять этими префиксами с помощью специального сопоставления префиксов, или этот пост Блеза Дафана.