Mapowanie XML obiektów Java – JAXB

http://www.iconarchive.com/show/senary-icons-by-arrioch/Internet-xml-icon.html

Podczas tworzenia oprogramowania na każdym kroku mamy kontakt z danymi w formacie XML. Opiszę tutaj jeden ze sposobów konwersji danych w obie strony Java <-> XML.

Ale na początek przyjrzyjmy się źródłom słynnego już kalkulatora wyborczego. Twórcy oprogramowania wykazali się dość ciekawym podejściem w generowaniu dokumentów XML, a dokładnie wykorzystali zwykłą konkatenację „stringów”:

Nietrudno można sobie wyobrazić co byłoby w przypadku bardziej skomplikowanej struktury zawierającej wiele węzłów podrzędnych i atrybutów. Programista prawdopodobnie niejednokrotnie pomylił się podczas zamykania znaczników (choćby przez „literówki”). Taki kod jest bardzo ciężki w utrzymaniu. Poza tym dokument będzie niemożliwy do odczytu, jeśli np. zmienna this.currentLwyb.Text zawierałaby jeden ze znaków predefiniowanych w XML encji: &, <, >, „, ‚.

Jest to przykład nierzadko spotykanych złych praktyk, a poniżej przestawię bardziej eleganckie rozwiązanie w Javie.

Biblioteka – JAXB

JAXB (Java Architecture for XML Binding) pozwala programistom wykonanie mapowania klas Java do ich reprezentacji w formacie XML

Biblioteka dostarcza takie funkcje jak:

  • marshalling – konwersja obiektu Java do formatu XML
  • unmarshalling – konwersja zawartości XML do obiektu Java

Wykorzystanie JAXB nie wymaga dołączania do projektu żadnych dodatkowych bibliotek jeżeli jest wykorzystywane JDK od wersji 6, ponieważ JAXB jest już w nim wbudowane.

Klasa i adnotacje

Klasy które chcemy wykorzystać do mapowania z XML muszą zawierać odpowiednie adnotacje JAXB. Dokładne informacje można znaleźć tutaj.

Niech za przykład elementu w XML posłużą dane kodu pocztowego z wcześniejszego artykułu:

Reprezentacja pozycji XML w klasie:

W kodzie powyżej zostały wykorzystane adnotacje JAXB:

  • @XmlRootElement, gdzie został ustawiony parametr „name” nadpisujący domyślną wartość nazwy atrybutu „postCode” na „pozycja”.
  • @XmlAttribute, gdzie również zostały ustawione parametry „name” nadpisujące domyślne wartości atrybutów.

 

Konwersja obiektu do XML

Wynik:

 

Konwersja XML do obiektu

Wynik:

 

Rozszerzenie o listę elementów

Należy utworzyć nową klasę zawierającą listę obiektów PostCode.

W kodzie powyżej doszła kolejna adnotacja:

  • @XmlElements – kontenter elementów @XmlElement.

 

Java -> XML

Wcześniej dodałem konstruktory w klasie PostCode:

 

Wynik:

 

XML -> Java

Wynik:

Szybko i elegancko.


Przykład zastosowania – wybory samorządowe 2014

Na zakończenie definicje klas do parsowania dokumentu XML zawierającego dane osób komisji wyborczych wyborów samorządowych w 2014 roku. Klasy zostały wykorzystane do importów danych z Państwowej Komisji Wyborczej, a statystyki można zobaczyć tutaj.

  1. Plik XML (zmienione dane osobowe)

     
  2. Reprezentacja osoby

     
  3. Reprezentacja całej komisji

     

 

To również może Cię zainteresować:

  • Wybory samorządowe 2014 – dane osób z komisji wyborczychWybory samorządowe 2014 – dane osób z komisji wyborczych Pod tym adresem umieszczone są były dane pochodzące ze wszystkich obwodów wyborczych. Wykonałem w Javie program, który pobrał informacje na temat wszystkich osób pracujących w komisjach […]
  • Java i listing wszystkich plików w kataloguJava i listing wszystkich plików w katalogu W ostatnim czasie musiałem przerobić jeden z systemów na wersję wielojęzykową. Chodziło dokładnie o to, aby wszystkie Stringi zostały wywołane przez tzw. wrapper ze wstrzyknięciem pewnego […]
  • Java JNA #2, Total CommanderJava JNA #2, Total Commander W poprzednim wpisie zrobiłem krótkie wprowadzenie do wykorzystywania biblioteki user32.dll przez Javę do pobierania informacji z innych aplikacji okienkowych. Poniżej rozszerzymy nasze […]
  • Arduino – zdalne sterowanie oświetleniemArduino – zdalne sterowanie oświetleniem W tym artykule opiszę sposób wykonania zdalnego sterowania jednym urządzeniem wpinanym do gniazdka 230V z wykorzystaniem Arduino. Wykorzystane będzie połączenie przez USB z komputerem, […]
  • Fundamenty języka JavaFundamenty języka Java Niecały miesiąc temu zostałem poproszony przez Strefę Kursów o ocenę ich nowo wydanego materiału dla osób chcących zacząć naukę programowania w Javie: "Fundamenty języka Java". Przerobiłem […]
  • Java Spring, recenzja kursu wideo z Videopoint.plJava Spring, recenzja kursu wideo z Videopoint.pl Każdy, kto zawodowo programuje w obojętnie jakim języku wie, że bez wsparcia frameworków nasze życie byłoby znacznie trudniejsze. Tak jak Python ma swojego Django, PHP - Symfony, czy Ruby […]

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *