"Oke, kalau begitu. Seperti yang mungkin sudah Anda duga, itu bukanlah segalanya."

"Sekarang saya akan memberi tahu Anda tentang beberapa aspek JAXB lainnya. Tapi seperti yang kami lakukan dengan JSON, kami akan mulai dengan koleksi."

"Saat deserialisasi koleksi menggunakan JAXB, ada juga ketidakpastian tentang koleksi tertentu (ArrayList, LinkedList, Vector, dll.) yang akan digunakan untuk variabel Daftar. Dan sekali lagi jawaban untuk pertanyaan ini diberikan oleh anotasi."

"Semuanya sangat sederhana. Jika jenis koleksi tidak ditentukan dalam anotasinya, maka JAXB akan mencoba memilih koleksi yang paling tepat menggunakan jenisnya. Untuk Daftar, ini akan menjadi ArrayList; untuk Peta, akan menjadi HashMap, dll. ."

"Pada kenyataannya, masalah di sini jauh lebih sedikit dibandingkan dengan JSON, karena setiap kelas memiliki tag unik, dan Anda dapat menggunakan tag tersebut untuk menentukan kelas yang tepat."

"Misalnya, jika Anda perlu melakukan deserialisasi sekelompok elemen yang mewarisi nenek moyang yang sama, Anda menggunakan  anotasi @XmlAny: "

Mengonversi objek dari 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);
}
Kelas yang objeknya dideserialisasi dari XML
@XmlType(nama = "kebun binatang") 
@XmlRootElement 
class  Zoo 
{ 
@XmlAny public  List<Object> hewan; } 
 


@XmlType(name = "cat") 
@XmlRootElement 
class  Cat 
{ 
 nama String publik ; usia int publik  ;  berat int publik ; 
 
 

 Kucing() 
 { 
 } 
}

@XmlType(nama = "anjing") 
@XmlRootElement 
kelas  Anjing 
{ 
 nama String publik ; usia int publik  ;  berat int publik ; 
 
 

 Kucing() 
 { 
 } 

"Jika koleksi ditandai dengan anotasi @XmlAny , maka objek apa pun yang sesuai dapat dimasukkan ke dalamnya. Dan JAXB Unmarshaller memperhatikan tag saat mengisi koleksi."

"Dalam hal ini, urutan tag " <zoo> <cat/><cat/> <dog/> <cat/> </zoo> " akan diubah menjadi koleksi dengan objek Cat, Cat, Dog, dan Cat ."

"Itu tentang apa yang saya harapkan."

"Uh-huh. Oh, omong-omong, satu hal lagi. Jika Anda melakukan deserialisasi campuran teks dan tag, Anda perlu menggunakan anotasi @XmlMixed ."

"Inilah contoh jenis XML ini:"

Contoh XML yang memerlukan anotasi @XmlMixed
<data> 
<item> 
tes 1 <item/> teks 2 <item> nama </item> teks 3 </item> </data> 

 

 

 

"Wow. Saya sudah lupa bahwa XML semacam itu ada. Saya sudah terbiasa dengan segala sesuatu yang indah, dengan tag tersemat, dan yang lainnya."

"Memang ada. Dan JAXB memiliki anotasi bahkan untuk kasus ini!"

"Bagus. Omong-omong, saya ingin bertanya: bagaimana enum diserialkan?"

"Pertanyaan bagus! Tangkapan bagus! Entah bagaimana aku melewatkan topik itu."

"Ada anotasi @XmlEnum khusus yang harus digunakan untuk menandai enum. Anda dapat menggunakannya untuk menentukan apakah nilai akan disimpan sebagai angka atau string."

"Ada juga anotasi @XmlEnumValue yang memungkinkan Anda menentukan nilai yang sesuai dengan bidang enum tertentu."

"Ini beberapa contohnya:"

Angka 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. Saya tidak dapat membayangkan di mana saya membutuhkan ini, tetapi menurut saya ini sangat berguna. Dan yang paling penting, saya tidak harus terpaku pada string standar atau nilai numerik."

"Ya. Ini berguna, misalnya, ketika Anda menulis sebuah program yang bertukar pesan dengan, katakanlah, server Facebook, dan mereka memiliki serangkaian nilai yang ditetapkan. Anda hanya perlu menetapkannya ke enum mereka sendiri dan semuanya akan berfungsi. "

"Itu luar biasa. Saya sangat menyukai JAXB."

"Bagus. Kalau begitu untuk hari ini. Pergi dan istirahatlah."