JAXB voor beginners: zelfstudie voor XML-verwerking met Java
Om applicaties met elkaar te laten communiceren, is het vaak nodig om de gegevens te converteren naar een formaat dat zeer compatibel is. Voor dit doel bestaat de JAXB-bibliotheek onder Java, die objecten in XML-bestanden verwerkt.
Genereer een XML-bestand met JAXB - Best Practices
JAXB staat voor Java Architecture for XML Binding . Hiermee kunnen Java-objecten worden geconverteerd naar XML-bestanden en vice versa. Voordat u aan de slag gaat, moet u rekening houden met het volgende:
- JAXB is een integraal onderdeel van de JRE-suite sinds versie 1.6 . Bovendien moet de Java-ontwikkelomgeving up-to-date zijn omdat deze bugs heeft opgelost.
- Vermijd primitieve gegevenstypen zoals float, decimaal of negatief geheel getal evenals anonieme gegevenstypen . Er is hiervoor geen equivalent in JAXB. Anders kunnen objecten, numerieke gegevenstypen, lijsten en sets worden geconverteerd. JAXB kan ook niet omgaan met complexe gegevenstypen zoals java.time.LocalDate . Dit vereist een speciaal gemaakte adapter .
- In technisch jargon wordt de richting van Java naar XML marshaling genoemd, terwijl unmarshaling staat voor de tegenovergestelde richting.
XML annotaties
Nieuwste video's
JAXB voor beginners: tutorial met behulp van het voorbeeld van een CD-collectie
AudioCD.java: de kenmerken van de audio-cd worden hier gedefinieerd
MusicDB.java: De muziekverzameling bestaat uit een lijst met audio-cd's
Onze tutorial gaat over een CD-collectie die wordt uitgevoerd in XML. Het bestaat uit verschillende audio-cd's. De artiest, het jaar van uitgave, de naam van het album en de nummers worden voor elke audio-cd opgenomen.
- Eerst moet de klasse worden gemaakt, die de gegevens van een audio-cd bevat. Dit omvat de artiest, het jaar van uitgave, het album en de nummers die op de CD staan.
- Om de uitvoer in XML-indeling beter te kunnen beheren, zijn XML-annotaties vereist die beginnen met @ onder Java.
- Het root-element in het XML-bestand kan worden opgegeven met de volgende annotatie: @XmlRootElement (name = "Audiocd")
- U kunt een annotatie boven de getter- of setter-methoden invoegen die een alternatieve naam voor een Java-kenmerk opgeeft. In plaats van het attribuutjaar moet het publicatiejaar bijvoorbeeld worden uitgevoerd: @XmlElement (name = "jaar van publicatie")
- De volgorde van de attributen wordt bepaald door de annotatie @XmlType (propOrder = {"artist", "title", "year", "songlist"}) . Dit betekent dat de naam van de artiest eerst in het XML-bestand verschijnt, gevolgd door de naam van het album, het jaar van uitgave en de lijst met de nummers. Anders is de volgorde afhankelijk van het Java-bestand.
- Maak vervolgens een nieuwe Java-klasse met de naam MusicDB, die een lijst met audio-cd's bevat. De naam van de muziekcollectie en de locatie van de muziekcollectie worden hier ook opgenomen. In principe is de procedure vergelijkbaar met die in het hierboven genoemde Java-bestand.
Van Java-objecten tot XML-bestanden
Nieuwste video's
AudioCDMain.java: hier worden verschillende audio-cd's gemaakt
AudioCDMain.java: Maak de muziekcollectie
AudioCDMain.java: converteert de code naar XML
De conversie zelf vindt plaats in een testprogramma, meer bepaald in de hoofdmethode.
- Maak eerst meerdere instanties voor audio-cd's zodat er meerdere audio-cd's worden gemaakt.
- Een exemplaar van de muziekcollectie van het MusicDB-type is ook vereist.
- Bovendien moet JAXB weten welke Java-klasse het root-element bevat. In ons geval is dit de MusicDB-klasse: JAXBContext context = JAXBContext.newInstance (MusicDB.class);
- De conversie vindt plaats met behulp van de Marshaller-instantie, die is gekoppeld aan de bovengenoemde JAXB-methode: Marshaller m = context.createMarshaller ();
- De Marshaller-methode biedt verdere opties, zoals dat het XML-document wordt opgemaakt: .setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Het hele ding in de tegenovergestelde richting
Nieuwste video's
AudioCDMain.java: JAXB genereert Java-objecten uit een XML-bestand
Het XML-bestand is al geformatteerd door JAXB
Kortom, de conversie in de andere richting verloopt op dezelfde manier:
- Eerst wordt een instantie van de unmarshaller-methode gemaakt: unmarshaller at = context.createUnmarshaller ();
- Vervolgens heeft de unmarshaler-instantie de naam van het eerder gemaakte XML-bestand nodig: MusicDB mdb2 = (MusicDB) um.unmarshal (new FileReader (MUSICDB_XML));