JAXB för nybörjare: Handledning för XML-behandling med Java
För att applikationer ska kommunicera med varandra är det ofta nödvändigt att konvertera data till ett format som är mycket kompatibelt. För detta ändamål finns JAXB-biblioteket under Java, som bearbetar objekt till XML-filer.
Generera en XML-fil med JAXB - Best Practices
JAXB står för Java Architecture för XML Binding . Det gör det möjligt att konvertera Java-objekt till XML-filer och vice versa. Innan du börjar är det några punkter att tänka på:
- JAXB har varit en integrerad del av JRE-sviten sedan version 1.6 . Dessutom bör Java-utvecklingsmiljön vara uppdaterad eftersom den fixar buggar.
- Undvik primitiva datatyper som float, decimal eller negativt heltal samt anonyma datatyper . Det finns ingen motsvarighet i JAXB för detta. Annars kan objekt, numeriska datatyper, listor och uppsättningar konverteras. JAXB kan inte heller hantera komplexa datatyper som java.time.LocalDate . Detta kräver en speciellt skapad adapter .
- I teknisk jargong kallas riktningen från Java till XML marshaling, medan avmontering står för motsatt riktning.
XML kommentarer
Senaste videor
JAXB för nybörjare: handledning med exempel på en CD-samling
AudioCD.java: Attributen för ljud-CD: n definieras här
MusicDB.java: Musiksamlingen består av en lista med ljud-CD-skivor
Vår handledning handlar om en CD-samling som matas ut i XML. Den består av flera ljud-CD-skivor. Artisten, utgivningsåret, albumets namn och låtarna spelas in för varje ljud-CD.
- Först ska klassen skapas, som innehåller data från en ljud-CD. Detta inkluderar artisten, utgivningsåret, albumet och låtarna på cd-skivan.
- För att bättre kontrollera utdata i XML-format krävs XML-kommentarer som börjar med @ under Java.
- Rotelementet i XML-filen kan specificeras med följande kommentar: @XmlRootElement (name = "Audiocd")
- Du kan infoga en kommentar ovanför getter- eller setter-metoderna som anger ett alternativt namn för ett Java-attribut. Istället för attributåret bör till exempel publiceras år: @XmlElement (namn = "publiceringsår")
- Attributens ordning bestäms av anteckningen @XmlType (propOrder = {"artist", "title", "year", "songlist"}) . Detta innebär att namnet på artisten visas först i XML-filen, följt av albumets namn, släppsåret och listan med låtarna. Annars beror ordningen på Java-filen.
- Skapa sedan en ny Java-klass som heter MusicDB, som innehåller en lista med ljud-CD-skivor. Namnet på musiksamlingen och platsen för musiksamlingen registreras också här. I princip liknar förfarandet det i Java-filen som nämns ovan.
Från Java-objekt till XML-filer
Senaste videor
AudioCDMain.java: Flera ljud-CD-skivor skapas här
AudioCDMain.java: Skapa musiksamlingen
AudioCDMain.java: Konverterar koden till XML
Konverteringen i sig sker i ett testprogram, närmare bestämt i huvudmetoden.
- Skapa först flera Audio CD-instanser så att flera Audio CD-skivor skapas.
- En instans av musiksamlingen MusicDB-typ krävs också.
- Dessutom måste JAXB veta vilken Java-klass som innehåller rotelementet. I vårt fall är detta MusicDB-klassen: JAXBContext context = JAXBContext.newInstance (MusicDB.class);
- Konverteringen sker med Marshaller-instansen som är länkad till JAXB-metoden som nämns ovan: Marshaller m = context.createMarshaller ();
- Metoden Marshaller tillhandahåller ytterligare alternativ, till exempel att XML-dokumentet formateras: .setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Det hela i motsatt riktning
Senaste videor
AudioCDMain.java: JAXB genererar Java-objekt från en XML-fil
XML-filen har redan formaterats av JAXB
I grund och botten fortsätter konverteringen i den andra riktningen på liknande sätt:
- Först skapas en instans av metoden unmarshaller : unmarshaller at = context.createUnmarshaller ();
- Då behöver unmarshaler-instansen namnet på den tidigare skapade XML-filen: MusicDB mdb2 = (MusicDB) um.unmarshal (ny FileReader (MUSICDB_XML));