Rumah  >  Artikel  >  Java  >  Mengapa JAXB Meninggalkan Anotasi @XmlRootElement Apabila Menjana Kelas Java?

Mengapa JAXB Meninggalkan Anotasi @XmlRootElement Apabila Menjana Kelas Java?

Linda Hamilton
Linda Hamiltonasal
2024-11-01 19:42:29582semak imbas

Why Does JAXB Omit the @XmlRootElement Annotation When Generating Java Classes?

JAXB Mengabaikan @XmlRootElement Anotasi

Isu

Apabila menjana kelas Java daripada skema XML menggunakan JAXB (Java Architecture for XML Binding), anda mungkin menghadapi ralat apabila tiada kelas mempunyai anotasi @XmlRootElement. Ini menghasilkan pengecualian semasa bersiri.

Penyelesaian

Fahami Peraturan Anotasi JAXB

JAXB XJC menggunakan peraturan khusus untuk menentukan bila hendak memasukkan anotasi @XmlRootElement. Peraturan ini rumit, seperti yang dibincangkan dalam [artikel ini](pautan-ke-artikel).

Alternatif kepada @XmlRootElement

Walaupun @XmlRootElement menyediakan kemudahan, ia adalah tidak wajib. Anda boleh menggunakan [objek pembalut JAXBElement](pautan-ke-dokumentasi) sebaliknya. Walau bagaimanapun, ia kurang senang untuk dibina kerana ia memerlukan pengetahuan tentang nama dan ruang nama elemen XML.

Gunakan ObjectFactory

XJC menjana kelas ObjectFactory bersama model kelas yang dijana. Kelas ini mengandungi kaedah kilang yang mencipta pembalut JAXBElement di sekeliling objek anda, mengendalikan nama XML dan ruang nama untuk anda. Terokai kaedah ObjectFactory untuk mencari kaedah yang mencipta JAXBElement untuk objek sasaran anda.

Contoh

<code class="java">import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;

import org.fpml._2008.fpml_4_5.ObjectFactory;
import org.fpml._2008.fpml_4_5.PositionReport;

// ...

// Create the JAXB context
JAXBContext context = JAXBContext.newInstance(PositionReport.class);

// Create the ObjectFactory
ObjectFactory factory = new ObjectFactory();

// Create a PositionReport instance
PositionReport positionReport = factory.createPositionReport();

// Create the JAXBElement wrapper
JAXBElement<PositionReport> element = factory.createPositionReport(positionReport);

// Create the Marshaller
Marshaller marshaller = context.createMarshaller();

// Marshal the JAXBElement
marshaller.marshal(element, System.out);</code>

Atas ialah kandungan terperinci Mengapa JAXB Meninggalkan Anotasi @XmlRootElement Apabila Menjana Kelas Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn