JAXB for nybegynnere: Opplæring for XML-prosessering med Java
For at applikasjoner skal kommunisere med hverandre, er det ofte nødvendig å konvertere dataene til et format som er svært kompatibelt. For dette formålet eksisterer JAXB-biblioteket under Java, som behandler objekter til XML-filer.
Generer en XML-fil med JAXB - Best Practices
JAXB står for Java Architecture for XML Binding . Det gjør det mulig å konvertere Java-objekter til XML-filer og vice versa. Før du kommer i gang, er det noen få punkter du bør tenke på:
- JAXB har vært en integrert del av JRE-suiten siden versjon 1.6 . I tillegg bør Java-utviklingsmiljøet være oppdatert fordi det løser feil.
- Unngå primitive datatyper som flyter, desimaler eller negativt heltall, så vel som anonyme datatyper . Det er ikke noe tilsvarende i JAXB for dette. Ellers kan objekter, numeriske datatyper, lister og sett konverteres. JAXB kan heller ikke håndtere komplekse datatyper som java.time.LocalDate . Dette krever en spesiallaget adapter .
- I teknisk jargon kalles retningen fra Java til XML marshaling, mens unmarshaling står for motsatt retning.
XML kommentarer
Siste videoer
JAXB for nybegynnere: veiledning ved å bruke eksemplet på en CD-samling
AudioCD.java: Attributtene til lyd-CDen er definert her
MusicDB.java: Musikksamlingen består av en liste over lyd-CDer
Opplæringen vår handler om en CD-samling som sendes ut i XML. Den består av flere lyd-CD-er. Artisten, utgivelsesåret, albumets navn og sangene er spilt inn for hver lyd-CD.
- Først skal klassen opprettes, som inneholder dataene til en lyd-CD. Dette inkluderer artisten, utgivelsesåret, albumet og sangene som er på CD-en.
- For bedre å kontrollere utdataene i XML-format kreves XML-merknader som begynner med @ under Java.
- Rotelementet i XML-filen kan spesifiseres ved hjelp av følgende merknad: @XmlRootElement (name = "Audiocd")
- Du kan sette inn en merknad over getter- eller setter-metodene som spesifiserer et alternativt navn for en Java-attributt. I stedet for attributtåret, for eksempel, skal publiseringsåret skrives ut: @XmlElement (navn = "publikasjonsår")
- Rekkefølgen på attributtene bestemmes av merknaden @XmlType (propOrder = {"artist", "title", "year", "songlist"}) . Dette betyr at navnet på artisten vises først i XML-filen, etterfulgt av navnet på albumet, utgivelsesåret og listen med sangene. Ellers avhenger rekkefølgen av Java-filen.
- Deretter lager du en ny Java-klasse kalt MusicDB, som inneholder en liste over lyd-CDer. Navnet på musikksamlingen og plasseringen av musikksamlingen er også spilt inn her. I prinsippet er prosedyren lik den i Java-filen som er nevnt over.
Fra Java-objekter til XML-filer
Siste videoer
AudioCDMain.java: Flere lyd-CDer er laget her
AudioCDMain.java: Lag musikksamlingen
AudioCDMain.java: Konverterer koden til XML
Selve konverteringen skjer i et testprogram, mer presist i hovedmetoden.
- Lag først flere lyd-CD-forekomster slik at flere lyd-CDer opprettes.
- Det kreves også en forekomst av musikksamlingen MusicDB-typen.
- I tillegg må JAXB vite hvilken Java-klasse som inneholder rotelementet. I vårt tilfelle er dette MusicDB-klassen: JAXBContext-kontekst = JAXBContext.newInstance (MusicDB.class);
- Konverteringen foregår ved bruk av Marshaller-forekomsten, som er knyttet til JAXB-metoden som er nevnt over: Marshaller m = context.createMarshaller ();
- Marshaller-metoden gir ytterligere alternativer, for eksempel at XML-dokumentet blir formatert: .setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Det hele i motsatt retning
Siste videoer
AudioCDMain.java: JAXB genererer Java-objekter fra en XML-fil
XML-filen er allerede formatert av JAXB
I utgangspunktet foregår konverteringen i den andre retningen på en lignende måte:
- Først opprettes en forekomst av unmarshaller-metoden: unmarshaller at = context.createUnmarshaller ();
- Da trenger unmarshaler-forekomsten navnet på XML-filen som tidligere ble opprettet: MusicDB mdb2 = (MusicDB) um.unmarshal (ny FileReader (MUSICDB_XML));