Ciele
- Oboznámiť sa s anotáciami nástroja JAXB a ich využitím.
- Oboznámiť sa so spôsobom konfigurácie projektu pre použitie nástroja JAXB.
Úvod
-
Tento modul bližšie opisuje anotácie a konfiguráciu nástroja JAXB.
Postup
-
Vybrané anotačné typy JAXB a ich použitie v jazyku pre definovanie používateľského rozhrania.
-
@XmlRootElementanotácia označuje triedu, ktorá predstavuje koreňový element XML dokumentu. Má dva nepovinné parametrename(meno XML elementu, implicitne sa použije meno triedy) anamespace.@XmlRootElement(namespace = "http://kpi.fei.tuke.sk/magsa") public class UI { ... -
@XmlElementanotácia označuje členskú premennú (resp. get/set metódu), ktorej hodnota má predstavovať obsah XML elementu.
V prípade, že chceme použiť viacero anotácií @XmlElement na jednu členskú prememnú, je možné ich zaobaliť anotáciou @XmlElements. Tá sa používa v prípade členskej premennej, ktorá predstavuje kolekciu. V takomto prípade parameter@XmlElement(name = "form") public Form[] getForms() { return forms; }typeurčuje, ktorý typ komponentov kolekcie sa zobrazuje na aký element.@XmlElements({ @XmlElement(name = "field", type = Field.class), @XmlElement(name = "lookupField", type = LookupField.class) }) public Field[] getFields() { return (Field[]) getComponents(); } -
@XmlAttributeanotácia označuje členskú premennú (resp. get/set metódu), ktorej hodnota má predstavovať hodnotu atribútu XML elementu, v kontexte ktorého sa daná premenná nachádza.@XmlAttribute(name="property", required = true) public String getPropertyName() { return propertyName; } -
@XmlTransientanotácia označuje triedu, členskú premennú alebo metódu, ktorej zobrazenie do XML dokumentu má byť potlačené. Takto označený jazykový element nebude mať svoju priamu reprezentáciu v XML dokumente.@XmlTransient public abstract class Component { ... } -
@XmlIDanotácia označuje premennú objektu (resp. get/set metódu), ktorá je použiteľná ako kľúč. Typ takto označenej premennej, či metódy musí byťjava.lang.String. Táto anotácia môže byť použitá spolu s anotáciou@XmlAttribute.@XmlID @XmlAttribute(required = true) public String getName() { return name; } -
@XmlIDREFanotácia označuje členskú premennú ktorá sa prostredníctvom kľúča odkazuje na existujúci element.@XmlAttribute(name = "table", required = true) @XmlIDREF public Table getTable() { return table; }
-
-
Aby bolo možné spracovať XML dokument a zobraziť ho do anotovaných tried, je potrebné zadefinovať kontext pre JAXB. Toto je možné realizovať pomocou súboru
jaxb.index, ktorý je umiestnený v balíku anotovaných tried. Tento súbor má jednoduchý formát. Obsahuje zoznam názvov tried (na každý riadok jedna), ktoré má JAXB spracovať. Zvyčajne stačí uviesť triedu predstavujúcu koreňový element, keďže JAXB spracuje aj ďalšie triedy na základe štruktúry triedy - pričom používa typy členských premenných a dedičnosť. Balík, ktorý bude spracovaný je takisto označený pomocou anotácie@XmlSchema. Tento opis musí byť zapísaný v súborepackage-info.javanachádzajúcom sa v danom balíku tried.Tieto súbory nakonfigurované pre náš projekt si môžete stiahnuť z jaxb.zip.
Zdroje
- Anotácie:
- Viac o JAXB:
-
Zdrojové kódy:
- jaxb.zip - konfiguračné súbory umožňujúce použitie knižnice JAXB.



Component, spracovať sa majú len jej konkrétne implementácie (Field,LookupField,Column,LookupColumn). Aj v prípade, že je abstraktná trieda vyradená zo spracovania, zdedené členské premenné tried, ktoré od nej dedia, sú spracované normálne. To znamená, že v prípade triedyComponentje samotná trieda vyradená zo spracovania, ale jej členské premenné je možné anotovať JAXB anotáciami.