JAXB: Menangani Anotasi @XmlRootElement yang Hilang
Menghadapi mesej ralat "tidak dapat menaip marshal... kerana tiada @XmlRootElement anotasi" mungkin perkara biasa yang membingungkan. Ini berpunca daripada alat JAXB (Java Architecture for XML Binding) XJC yang tidak secara automatik menjana anotasi @XmlRootElement yang penting pada kelas yang dijana, menghalang penggunaannya untuk bersiri.
Menyingkap Logik Di Belakang Gelagat Anotasi XJC
Memahami sebab XJC memutuskan untuk tidak menganotasi kelas dengan @XmlRootElement adalah penting. Pilihan ini dipandu oleh satu set peraturan yang kompleks. Pada asasnya, @XmlRootElement menyediakan butiran penting tentang nama dan ruang nama elemen XML, membimbing JAXB semasa proses marshaling dan unmarshaling.
Mencari Alternatif kepada @XmlRootElement
Walaupun @ XmlRootElement memegang tempatnya sebagai kemudahan, ia bukan satu keperluan untuk JAXB. Sebagai alternatif, seseorang boleh menggunakan JAXBElement objek pembalut. Objek ini menyampaikan maklumat nama XML dan ruang nama yang sama seperti @XmlRootElement, walaupun dalam bentuk objek dan bukannya bentuk anotasi.
Kemudahan @XmlRootElement ialah ia menghilangkan keperluan untuk mengetahui tentang nama dan ruang nama elemen XML, yang biasanya bukan kebimbangan logik perniagaan. Walau bagaimanapun, membina objek JAXBElement boleh menjadi sukar, memerlukan pengetahuan khusus ini.
Memanfaatkan JAXB's ObjectFactory
Nasib baik, XJC melangkaui penjanaan model kelas. Ia juga menyediakan kelas yang dipanggil ObjectFactory. ObjectFactory menempatkan kaedah kilang yang menghasilkan pembalut JAXBElement di sekeliling objek tersuai. Ciri ini meringankan beban penjejakan nama XML dan ruang nama. Seseorang hanya perlu meneroka kaedah yang tersedia dalam ObjectFactory (selalunya banyak dalam skema yang luas) untuk mengenal pasti kaedah yang sesuai untuk keperluan mereka.
Atas ialah kandungan terperinci Mengapa Alat XJC JAXB tidak Menghasilkan Anotasi @XmlRootElement Secara Automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!