Как заставить JAXB распознавать параметры аннотации @XmlElement (по умолчанию = 'что-то')? - PullRequest
1 голос
/ 04 января 2011

Не повезло в генерации XML с фиксированными значениями элементов с использованием JAXB 2.1 RI. Мы генерируем код с привязкой к XML с использованием xjc и собираем результаты.

Работает для атрибутов, использующих <xs:attribute fixed='something'/> и свойство настройки JAXB fixedAttributeAsConstantProperty. Для элементов мы полагали, что не было никакого способа сделать то же самое. Или есть?

В качестве обходного пути мы использовали <xs:element default='something'/>, который превращается в @XmlElement(default='something'). Теперь я предполагаю, что вы можете сказать маршаллеру как-то интерпретировать параметр default и сгенерировать элемент с соответствующим содержимым, например <element>something</element>.

Я посмотрел на стандартные и специфичные для RI свойства конфигурации маршаллера, но не нашел ничего полезного. Кажется, есть плагин xjc, который делает нечто подобное [1], но я был бы немного удивлен, если бы не было стандартного способа JAXB для этого.

Любые указатели высоко ценятся, спасибо.

[1] http://fisheye5.cenqua.com/browse/~raw,r=1.5/jaxb2-commons/www/default-value/index.html

Ответы [ 2 ]

2 голосов
/ 08 января 2011

Спецификация схемы XML касается только демаршаллинга, то есть определения информационного набора после проверки исходного представления XML.

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

На мой взгляд, лучшим решением для решения является расширение плагина значений по умолчанию для обработки фиксированных элементов, сделав поле финальным и удалив сеттер.

Код для плагина очень прост, правда!

0 голосов
/ 05 февраля 2015

Существует плагин maven, который можно использовать для генерации констант: https://github.com/fbdo/jaxb2-fixed-value

...