Я считаю то, что вы пытаетесь сделать, разумным, особенно для достижения гармонии между Атрибутом и Простыми Элементами.Это кажется странным, но, похоже, разработчики jaxb2 решили добавить дополнительный набор расширений, которые вы должны добавить, чтобы получить желаемое поведение.См .:
(я бы скорее увидел более естественное поведение по умолчанию и согласованность между Атрибутами и Элементами хотя бы простых типов - безнеобходимо зарегистрировать плагин. Затем предоставьте плагин для особых случаев. Мои единственные ребята, почему это не было сделано, или обратная совместимость - предположение.)
По умолчанию jaxb2-commonsПлагин value относится к дополнительным командам (и банкам), которые вы добавляете в xjc, что, в свою очередь, добавляет поведение по умолчанию в поле.В моем случае:
public String getScalarOptionalMaxAndDefaultString() {
if (scalarOptionalMaxAndDefaultString == null) {
return "def val 1";
} else {
return scalarOptionalMaxAndDefaultString;
}
}
(где, конечно, условная нулевая проверка представляет значение по умолчанию или нет.)
Использование Блейза Дафана кажется практичнымобойти.В зависимости от характера вашего документа XML, это может быть идеально.
Тем не менее, похоже, что этот плагин Default Value может переместить решение в процесс сборки и не увидеть изменений в вашем коде (при условии, что вы используете Dom, в отличие от предложенного Блейзом синтаксического анализатора Sax).
Похоже, что плагин значения по умолчанию решит проблему и, возможно, обеспечит дополнительную расширяемость (не требует такой расширенной настройки) в маловероятном случае, когда вам потребуется еще более программный контроль значений по умолчанию с запущенным xjc.
Вот фрагмент конфигурации maven на случай, если это поможет:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<args>
<arg>-Xdefault-value</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-default-value</artifactId>
<version>1.1</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
<configuration><schemaDirectory>src/test/resources</schemaDirectory></configuration>
</plugin>