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.
-
@XmlRootElement
anotá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 { ...
-
@XmlElement
anotá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; }
type
urč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(); }
-
@XmlAttribute
anotá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; }
-
@XmlTransient
anotá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 { ... }
-
@XmlID
anotá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; }
-
@XmlIDREF
anotá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.java
nachá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 triedyComponent
je samotná trieda vyradená zo spracovania, ale jej členské premenné je možné anotovať JAXB anotáciami.