JAXB for begyndere: Vejledning til XML-behandling med Java
For at applikationer skal kommunikere med hinanden, er det ofte nødvendigt at konvertere dataene til et format, der er meget kompatibelt. Til dette formål findes JAXB-biblioteket under Java, der behandler objekter til XML-filer.
Generer en XML-fil med JAXB - Best Practices
JAXB står for Java Architecture for XML Binding . Det gør det muligt at konvertere Java-objekter til XML-filer og vice versa. Før du kommer i gang, er der et par punkter, du skal overveje:
- JAXB har været en integreret del af JRE-pakken siden version 1.6 . Derudover skal Java-udviklingsmiljøet være opdateret, fordi det løser fejl.
- Undgå primitive datatyper som float, decimal eller negativ heltal samt anonyme datatyper . Der er ingen tilsvarende i JAXB for dette. Ellers kan objekter, numeriske datatyper, lister og sæt konverteres. JAXB kan heller ikke håndtere komplekse datatyper såsom java.time.LocalDate . Dette kræver en specielt oprettet adapter .
- I teknisk jargon kaldes retningen fra Java til XML marshaling, mens unmarshaling står for den modsatte retning.
XML anmærkninger
Seneste videoer
JAXB for begyndere: tutorial ved hjælp af eksemplet på en CD-samling
AudioCD.java: Attributterne på lyd-CD'en er defineret her
MusicDB.java: Musiksamlingen består af en liste med lyd-cd'er
Vores tutorial handler om en cd-samling, der udsendes i XML. Den består af flere lyd-cd'er. Kunstneren, udgivelsesåret, albumets navn og sangene indspilles for hver lyd-cd.
- Først skal klassen oprettes, som indeholder dataene fra en lyd-cd. Dette inkluderer kunstneren, udgivelsesåret, albummet og de sange, der er på cd'en.
- For bedre at kontrollere output i XML-format kræves XML-kommentarer, der begynder med @ under Java.
- Rodenelementet i XML-filen kan specificeres ved hjælp af følgende annotation: @XmlRootElement (name = "Audiocd")
- Du kan indsætte en kommentar over getter- eller settermetoderne, der specificerer et alternativt navn til en Java-attribut. I stedet for attributåret skal for eksempel publiceres året: @XmlElement (navn = "publikationsår")
- Rækkefølgen af attributter bestemmes af annotationen @XmlType (propOrder = {"artist", "titel", "år", "sangliste"}) . Dette betyder, at kunstnerens navn først vises i XML-filen, efterfulgt af navnet på albummet, udgivelsesåret og listen med sangene. Ellers afhænger rækkefølgen af Java-filen.
- Opret derefter en ny Java-klasse kaldet MusicDB, som indeholder en liste over lyd-cd'er. Navnet på musiksamlingen og placeringen af musiksamlingen registreres også her. I princippet ligner proceduren den i ovennævnte Java-fil.
Fra Java-objekter til XML-filer
Seneste videoer
AudioCDMain.java: Flere lyd-cd'er oprettes her
AudioCDMain.java: Opret musiksamlingen
AudioCDMain.java: Konverterer koden til XML
Selve konverteringen finder sted i et testprogram, mere præcist i hovedmetoden.
- Opret først flere lyd-cd-forekomster, så der oprettes flere lyd-cd'er.
- Der kræves også et eksempel på musiksamlingen MusicDB-type.
- Derudover skal JAXB vide, hvilken Java-klasse der indeholder rodelementet. I vores tilfælde er dette MusicDB-klassen: JAXBContext-kontekst = JAXBContext.newInstance (MusicDB.class);
- Konverteringen finder sted ved hjælp af Marshaller-forekomsten, der er knyttet til JAXB-metoden nævnt ovenfor: Marshaller m = context.createMarshaller ();
- Marshaller-metoden indeholder yderligere indstillinger, såsom at XML-dokumentet er outputformateret: .setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Det hele i den modsatte retning
Seneste videoer
AudioCDMain.java: JAXB genererer Java-objekter fra en XML-fil
XML-filen er allerede formateret af JAXB
Grundlæggende foregår konverteringen i den anden retning på en lignende måde:
- Først oprettes en forekomst af metoden unmarshaller : unmarshaller at = context.createUnmarshaller ();
- Derefter har unmarshaler-forekomsten brug for navnet på den tidligere oprettede XML-fil: MusicDB mdb2 = (MusicDB) um.unmarshal (ny FileReader (MUSICDB_XML));