2015-10-18 4 views
0

У меня есть схема, которая определяет тип с дополнительными логическими атрибутами. Я хотел бы добавить тип, который добавляет ограничение, которое устанавливает значение по умолчанию для атрибутов «истинный»Применение значения значения по умолчанию в генерируемых Java-классах JAXB

<xsd:complexType name="bob"> 
    <xsd:attribute name="isBob" type="xsd:boolean" use="optional" /> 
</xsd:complexType> 

<xsd:complexType name="reallyBob"> 
    <xsd:complexContent> 
     <xsd:restriction base="sa:bob"> 
      <xsd:attribute name="isBob" type="xsd:boolean" default="true" use="optional" /> 
     </xsd:restriction> 
    </xsd:complexContent> 
</xsd:complexType> 

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

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "reallyBob") 
public class ReallyBob 
    extends Bob 
{ 
} 

Есть ли какой-то способ, которым я могу получить сгенерированный класс ReallyBob, чтобы установить значение по умолчанию isBob атрибутов?

Я видел подобные вопросы об ограничениях не применяемых JAXB, т.е. here и here Ответы указывают на поворот на проверку схемы во время сортировочных ... Я не уверен, как это будет применяться в этом случае, как значения по умолчанию, а чем стоимостные ограничения.

Возможно, есть еще один подход к этому все вместе?

ответ

1

Один из вариантов заключается в том, чтобы установить значение после завершения размонтирования.

Это включает в себя добавление следующий метод к объекту и установить объект значение по умолчанию внутри этого метода:

void afterUnmarshal(Unmarshaller u, Object parent) { 
    this.isBob = true; 
} 

Показать похожие документы here

+0

Благодаря Кирсти, мы не можем использовать «в класс ", поскольку классы генерируются, и любые коды кода будут отброшены в следующий раз, когда они будут сгенерированы. Однако мы могли бы использовать экземпляр Unmarshaller.Listener для установки значений по умолчанию для наших ограниченных (со значениями по умолчанию) элементов. Это сработает. Однако это означает, что нам нужно реплицировать набор значений по умолчанию, определенных в схеме и в прослушивателе Unmarshalling, со всеми шансами на ошибки, которые влечет за собой .... но я еще не нашел лучшего способа достичь этого. –

+0

А мои извинения, я не понимал. Да, ваше решение будет делать то же самое, что и мое, просто где-то другое! Одно последнее предложение, которое у меня есть, заключается в том, что иногда аннотации JAXB явно не нужны, проверили ли вы, что значение по умолчанию определенно не установлено? – kirsty

Смежные вопросы