Rumah > Java > javaTutorial > teks badan

Mengapa JAXB Meninggalkan Anotasi @XmlRootElement Apabila Menjana Kelas Java?

Linda Hamilton
Lepaskan: 2024-11-01 19:42:29
asal
583 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan