V jednom z předchozích příspěvků jsem se věnoval základní práci s JAXB, kde jsem používal pouze dvě anotace a to @XmlRootElement
a @XmlType
. Podívejme se na část vytvořeného xml souboru.
<company> <centers> <code>METPRG</code> <description>Office center Metronom in Prague</description> <rooms> <code>A02</code> <numberOfSeats>14</numberOfSeats> </rooms> <rooms> <code>A13</code> <numberOfSeats>42</numberOfSeats> </rooms> <rooms> <code>B08</code> <numberOfSeats>22</numberOfSeats> </rooms> </centers> <centers> <code>AVIPRG</code> <description>Office center Aviatica in Prague</description> <rooms> <code>AA41</code> <numberOfSeats>70</numberOfSeats> </rooms> <rooms> <code>CA12</code> <numberOfSeats>38</numberOfSeats> </rooms> ...
Company obsahuje seznam elementů center a ty v sobě mají seznam elementů room. Když se podíváte pečlivěji, uvidíte, že každý element center se jmenuje centers a každý element room se jmenuje rooms. Určitě by to lépe vypadalo, kdyby se tyto elementy jmenovaly center a room. Nebo možná ještě lépe, kdyby se element center jmenoval jednoznačněji business_center. Jak center tak room obsahují element code. Bylo čitelnější, kdyby se jmenovaly center_code a room_code. A také kořenový element company by mohl obsahovat ještě atribut s názvem společnosti. To vše je možné, když použijeme další anotace, které JAXB nabízí.
Anotace @XmlAccessorType říká, že každý field (nestatická a netransientní proměnná – to jsou v tomto příkladu všechny) bude svázán s xml elementem.
Anotaci @XmlElementWrapper použijeme, když pracujeme se seznamem. Vytvoříme element, který bude v sobě obsahovat jednotlivé elementy seznamu.
Anotace @XmlAttribute nevytvoří xml element, ale atribut. Pomocí hodnoty, kterou přiřadíme do name nastavíme atributu název.
Když použijeme anotaci @XmlElement, můžeme předat hodnotu name a tím nastavíme názvem xml elementu.
Jasnější to bude na příkladu.