JAXB dla początkujących: samouczek dotyczący przetwarzania XML w Javie
Aby aplikacje mogły się ze sobą komunikować, często konieczna jest konwersja danych do formatu, który jest wysoce kompatybilny. W tym celu w Javy istnieje biblioteka JAXB, która przetwarza obiekty na pliki XML.
Wygeneruj plik XML za pomocą JAXB - Best Practices
JAXB oznacza Java Architecture for XML Binding . Umożliwia konwertowanie obiektów Java na pliki XML i odwrotnie. Zanim zaczniesz, pamiętaj o kilku kwestiach:
- JAXB jest integralną częścią pakietu JRE od wersji 1.6 . Ponadto środowisko programistyczne Java powinno być aktualne, ponieważ naprawiało błędy.
- Unikaj prymitywnych typów danych, takich jak liczba zmiennoprzecinkowa, dziesiętna lub ujemna liczba całkowita, a także anonimowe typy danych . W JAXB nie ma tego odpowiednika. W przeciwnym razie można konwertować obiekty, typy danych numerycznych, listy i zestawy. JAXB nie może również obsługiwać złożonych typów danych, takich jak java.time.LocalDate . Wymaga to specjalnie utworzonego adaptera .
- W żargonie technicznym kierunek od Java do XML nazywa się marshaling, podczas gdy unmarshaling oznacza kierunek przeciwny.
adnotacji XML
Najnowsze filmy
JAXB dla początkujących: samouczek na przykładzie kolekcji płyt CD
AudioCD.java: Tutaj zdefiniowano atrybuty płyty audio CD
MusicDB.java: kolekcja muzyki składa się z listy płyt CD audio
Nasz samouczek dotyczy kolekcji płyt CD, która jest wyprowadzana w formacie XML. Składa się z kilku płyt CD audio. Artysta, rok wydania, nazwa albumu i piosenki są nagrywane dla każdej płyty CD audio.
- Najpierw należy stworzyć klasę, która zawiera dane z płyty audio CD. Obejmuje to wykonawcę, rok wydania, album i utwory znajdujące się na płycie CD.
- Aby lepiej kontrolować dane wyjściowe w formacie XML, wymagane są adnotacje XML rozpoczynające się od @ w Javie.
- Element główny w pliku XML można określić za pomocą następującej adnotacji: @XmlRootElement (name = „Audiocd”)
- Możesz wstawić adnotację nad metodami pobierającymi lub ustawiającymi, które określają alternatywną nazwę atrybutu Java. Na przykład zamiast atrybutu rok należy podać rok publikacji: @XmlElement (name = „year of opublikowanie”)
- Kolejność atrybutów jest określona adnotacją @XmlType (propOrder = {„artist”, „title”, „year”, „songlist”}) . Oznacza to, że nazwisko artysty pojawia się najpierw w pliku XML, a następnie nazwa albumu, rok wydania i lista utworów. W przeciwnym razie kolejność zależy od pliku Java.
- Następnie utwórz nową klasę Java o nazwie MusicDB, która zawiera listę płyt CD audio. Tutaj zapisywana jest także nazwa kolekcji muzycznej i lokalizacja kolekcji muzycznej. Zasadniczo procedura jest podobna do procedury opisanej powyżej w pliku Java.
Od obiektów Java do plików XML
Najnowsze filmy
AudioCDMain.java: Tutaj utworzono kilka płyt CD audio
AudioCDMain.java: Utwórz kolekcję muzyki
AudioCDMain.java: Konwertuje kod na XML
Sama konwersja odbywa się w programie testowym, a dokładniej w metodzie głównej.
- Najpierw utwórz wiele instancji płyt Audio CD, aby utworzyć wiele płyt Audio CD.
- Wymagana jest również instancja kolekcji muzycznej typu MusicDB.
- Ponadto JAXB musi wiedzieć, która klasa Java zawiera element główny. W naszym przypadku jest to klasa MusicDB : JAXBContext context = JAXBContext.newInstance (MusicDB.class);
- Konwersja odbywa się za pomocą instancji Marshaller, która jest powiązana z wyżej wspomnianą metodą JAXB: Marshaller m = context.createMarshaller ();
- Metoda Marshaller zapewnia dalsze opcje, takie jak formatowanie dokumentu wyjściowego XML: .setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
Cała rzecz w przeciwnym kierunku
Najnowsze filmy
AudioCDMain.java: JAXB generuje obiekty Java z pliku XML
Plik XML został już sformatowany przez JAXB
Zasadniczo konwersja w innym kierunku przebiega w podobny sposób:
- Najpierw tworzona jest instancja metody unmarshaller : unmarshaller at = context.createUnmarshaller ();
- Następnie instancja unmarshaler potrzebuje nazwy wcześniej utworzonego pliku XML: MusicDB mdb2 = (MusicDB) um.unmarshal (new FileReader (MUSICDB_XML));