"Rendben, akkor. Ahogy valószínűleg már sejtette, ez nem minden."
"Most a JAXB több más vonatkozásáról is mesélek. De ahogy a JSON-nál is tettük, most is a gyűjteményekkel kezdjük."
"A gyűjtemények JAXB használatával történő deszerializálása során az is bizonytalan, hogy melyik gyűjteményt (ArrayList, LinkedList, Vector stb.) használja a Lista változóhoz. És erre a kérdésre ismét az annotációk adják a választ."
"Minden nagyon egyszerű. Ha a gyűjtemény típusa nincs megadva a megjegyzésében, akkor a JAXB megpróbálja kiválasztani a legmegfelelőbb gyűjteményt a típusa alapján. Lista esetén ez ArrayList, térképnél HashMap stb. ."
"A valóságban itt sokkal kevesebb probléma van, mint a JSON-nál, mert minden osztálynak egyedi címkéje van, és a címkével megadhatja a pontos osztályt."
"Ha például olyan elemcsoportot kell deszerializálnia, amely közös őst örököl, használja az @XmlAny: megjegyzést."
public static void main(String[] args) throws JAXBException
{
String xmldata = "<zoo><cat/><cat/><dog/><cat/></zoo>";
StringReader reader = new StringReader(xmldata);
JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class, Dog.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
@XmlType(név = "állatkert") @XmlRootElement osztály Állatkert { @XmlAny public List<Object> állatok; } @XmlType(név = "macska") @XmlRootElement class Cat { public String name; nyilvános int kor; nyilvános int súly; Cat() { } } @XmlType(név = "kutya") @XmlRootElement osztály Kutya { public String name; nyilvános int kor; nyilvános int súly; Cat() { } }
"Ha egy gyűjtemény @XmlAny annotációval van megjelölve, akkor tetszőleges megfelelő objektum kerülhet bele. A JAXB Unmarshaller pedig a gyűjtemény feltöltésekor figyel a címkékre."
"Ebben az esetben a(z) " <zoo> <cat/><cat/> <dog/> <cat/> </zoo> " címkesorozat egy macska, macska, kutya és macska objektumokat tartalmazó gyűjteménymé alakul. ."
– Körülbelül erre számítottam.
"Aha. Apropó, még egy dolog. Ha a szöveg és a címkék keverékét deszerializálja, akkor az @XmlMixed annotációt kell használnia."
"Íme egy példa az ilyen típusú XML-re:"
<data> <items> teszt 1 <item/> text 2 <item> name </item> text 3 </items> </data>
"Hűha. Elfelejtettem, hogy létezik ilyen XML. Megszoktam, hogy minden szép, beágyazott címkékkel és minden mással."
"Létezik. És a JAXB-nek még erre az esetre is van megjegyzése!"
"Remek. Egyébként meg akartam kérdezni: hogyan készülnek az enumok sorozatosítása?"
"Jó kérdés! Szép fogás! Valahogy kihagytam ezt a témát."
"Van egy speciális @XmlEnum annotáció, amelyet az enumok jelölésére kell használni. Ezzel megadhatja, hogy az értékek számokként vagy karakterláncokként legyenek tárolva."
"Van egy @XmlEnumValue megjegyzés is, amely lehetővé teszi egy adott enum mezőnek megfelelő érték megadását."
"Íme néhány példa:"
Számok | Húrok |
---|---|
|
|
"Szent moly. Nem tudom elképzelni, hol lenne szükségem erre, de szerintem nagyon hasznos. És ami a legfontosabb, nem kell ragaszkodnom a szabványos karakterláncokhoz vagy numerikus értékekhez."
"Igen. Ez praktikus, ha például írsz egy programot, amely üzeneteket cserél mondjuk egy Facebook szerverrel, és hozzájuk van egy értékkészletük. Csak hozzá kell rendelned őket a saját enumhoz, és minden működni fog. "
"Ez csodálatos. Határozottan szeretem a JAXB-t."
"Remek. Akkor mára ennyi. Menj és tarts egy kis szünetet."
GO TO FULL VERSION