"Okay, then. As you've probably already guessed, that wasn't everything."

"Ngayon sasabihin ko sa iyo ang tungkol sa ilang iba pang aspeto ng JAXB. Ngunit tulad ng ginawa namin sa JSON, magsisimula kami sa mga koleksyon."

"Kapag deserializing ang mga koleksyon gamit ang JAXB, mayroon ding kawalan ng katiyakan tungkol sa kung aling partikular na koleksyon (ArrayList, LinkedList, Vector, atbp.) ang gagamitin para sa List variable. At muli ang sagot sa tanong na ito ay ibinibigay ng mga anotasyon."

"Ang lahat ng ito ay medyo simple. Kung ang uri ng koleksyon ay hindi tinukoy sa anotasyon nito, susubukan ng JAXB na piliin ang pinakaangkop na koleksyon gamit ang uri nito. Para sa isang Listahan, ito ay ArrayList; para sa isang Map, ito ay HashMap, atbp. ."

"Sa totoo lang, mas kaunting problema dito kaysa sa JSON, dahil may natatanging tag ang bawat klase, at magagamit mo ang tag para tukuyin ang eksaktong klase."

"Halimbawa, kung kailangan mong i-deserialize ang isang pangkat ng mga elemento na nagmamana ng isang karaniwang ninuno, gagamitin mo ang  @XmlAny: annotation"

I-convert ang isang bagay mula sa XML
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);
}
Isang klase na ang mga bagay ay deserialized mula sa XML
@XmlType(name = "zoo") 
@XmlRootElement 
class  Zoo 
{ 
@XmlAny public  List<Object> mga hayop; } 
 


@XmlType(name = "cat") 
@XmlRootElement 
class  Cat 
{ 
public  String name; pampublikong  int edad; pampublikong  int timbang; 
 
 

 Pusa() 
 { 
 } 
}

@XmlType(name = "aso") 
@XmlRootElement 
class  Aso 
{ 
pampublikong  String pangalan; pampublikong  int edad; pampublikong  int timbang; 
 
 

 Pusa() 
 { 
 } 

"Kung ang isang koleksyon ay minarkahan ng @XmlAny annotation, kung gayon ang anumang angkop na bagay ay maaaring ilagay dito. At binibigyang-pansin ng JAXB Unmarshaller ang mga tag kapag na-populate ang koleksyon."

"Sa kasong ito, ang pagkakasunod-sunod ng mga tag na " <zoo> <cat/><cat/> <dog/> <cat/> </zoo> " ay mako-convert sa isang koleksyon na may mga bagay na Pusa, Pusa, Aso, at Pusa ."

"Iyon ay tungkol sa kung ano ang inaasahan ko."

"Uh-huh. Oo nga pala, isa pa. Kung i-deserialize mo ang pinaghalong text at mga tag, kailangan mong gamitin ang @XmlMixed annotation."

"Narito ang isang halimbawa ng ganitong uri ng XML:"

Sample XML na nangangailangan ng @XmlMixed annotation
<data> 
<item> 
test 1 <item/> text 2 <item> name </item> text 3 </item> </data> 

 

 

 

"Wow. Nakalimutan ko na may ganoong XML. Nasanay ako na maganda ang lahat, may naka-embed na tag, at lahat ng iba pa."

"Ito ay umiiral. At ang JAXB ay may anotasyon kahit para sa kasong ito!"

"Great. By the way, I wanted to ask: how are enums serialized?"

"Good question! Nice catch! I somehow na-skip yung topic."

"May isang espesyal na @XmlEnum annotation na dapat gamitin upang markahan ang mga enum. Magagamit mo ito upang tukuyin kung ang mga halaga ay maiimbak bilang mga numero o string."

"Mayroon ding @XmlEnumValue annotation na nagbibigay-daan sa iyong tukuyin ang halaga na tumutugma sa isang partikular na field ng enum."

"Narito ang ilang mga halimbawa:"

Numero Mga string
@XmlType
@XmlEnum(Integer.class)
public enum Code
{
 @XmlEnumValue("1")
  START,

 @XmlEnumValue("2")
  INPROGRESS,

 @XmlEnumValue("3")
  FINISH

 @XmlEnumValue("-1")
  ERROR
}
@XmlType
@XmlEnum(String.class)
public enum Card
{
 @XmlEnumValue("Spade")
  CLUBS,

 @XmlEnumValue("Diamond")
  DIAMONDS,

 @XmlEnumValue("Heart")
  HEARTS,

 @XmlEnumValue("Club")
  SPADES
}

"Holy moly. Hindi ko maisip kung saan ko ito kakailanganin, ngunit sa tingin ko ito ay lubhang kapaki-pakinabang. At higit sa lahat, hindi ko kailangang manatili sa karaniwang string o mga numerong halaga."

"Yep. Ito ay madaling gamitin, halimbawa, kapag sumulat ka ng isang programa na nagpapalitan ng mga mensahe sa, sabihin nating, isang Facebook server, at mayroon silang nakatalagang hanay ng mga halaga. Kailangan mo lang silang italaga sa kanilang sariling enum at lahat ay gagana. "

"Iyan ay kahanga-hanga. Talagang gusto ko ang JAXB."

"Great. Then that's it for today. Go and take a break."