XML – ćwiczenia 14: JAXB.

Wszystkie przykładowe programy:

Referencje

Wiązanie XML (w Javie)

Wiązanie XML w języku programowania (u nas w Javie) to pomysł, aby schematom dokumentów XML (DTD, XML Schema itp.) odpowiadały hierarchie klas, a instancjom dokumentów konkretne obiekty (z obiektami – podelementami itd., tworząc strukturę drzewiastą).

Na przykład elementowi osoba z polami imie i nazwisko typu xs:string może odpowiadać klasa Osoba z polami imie i nazwisko typu String.

Dokument zgodny ze schematem można wczytać do pamięci (unmarshalling), a drzewo obiektów zapisać do dokumentu (marshalling).

Nie ma potrzeby pamiętania nazw elementów i atrybutów (po prostu widać jakiego są typu), w wielu przypadkach można też uniknąć tworzenia list i słowników, dzięki temu wiązanie XML jest mniej pamięciochłonne i szybsze niż DOM.

JAXB

Standard Java API for XML Binding jest realizacją idei „wiązania XML” w Javie, został opracowany przez Suna, obecnie jest projektem open-source. JAXB jest częścią platformy Java Standard Edition od wersji 6.

JAXB w wersji 2.x oparte jest o adnotacje Javy. Do działania JAXB wymagany jest "kontekst" (obiekt klasy JAXBContext) utworzony w oparciu o klasy z adnotacjami JAXB. Do działania nie jest potrzebny schemat.

Klasy z adnotacjami JAXB można

  • wygenerować ze schematu za pomocą narzędzia xjc,
  • lub przygotować samemu; na podstawie takich klas można wygenerowac schemat narzędziem schemagen (ale nie jest to niezbędne do działania JAXB).

Klasy wygenerowane zawierają zwykle duzo adnotacji, aby zachować jak najwięcej szczegółów odczytanych ze schematu. W klasach przygotowywanych samemu obowiązkowa jest jedynie adnotacja @XmlRootElement w klasie odpowiadającej elementowi głównemu. Za pomocą dodatkowych adnotacji można zmienić sposób mapowania obiektów Javy do XML i schemat generowany na podstawie klas.

Typowe kroki implementacji aplikacji używającej JAXB (scenariusz 'klasyczny': XML → Java)

  1. Przygotowanie schematu dokumentów.
  2. Kompilacja schematu narzędziem XJC, generuje klasy Javy odpowiadające typom zdefiniowanym w schemacie.

  3. Napisanie samej aplikacji korzystając z:

    • uniwersalnej części API JAXB,
    • klas wygenerowanych przez XJC.
  4. Uwaga! Zmiana schematu po napisaniu aplikacji może spowodować konieczność znacznych zmian w kodzie.

Przykład 1. Przykład z wykładu (staff)

Pliki: StaffJAB.java, klasy wygenerowane przez XJC.

Zadanie 1.

  1. Skompiluj schemat sklep_ns.xsd do klas Javy (narzędziem xjc lub w Eclipse).
  2. Napisz program korzystający z JAXB, czytający dokument taki jak sklep_ns.xml i dla podanego w parametrze id kategorii wypisujący nazwę i cenę najtańszego towaru w tej kategorii.
  3. Rozszerz schemat o opcjonalny element cena-brutto. Napisz program dopisujący ceny brutto dla towarów.

  1. Compile schema sklep_ns.xsd to Java classes (using xjc or in Eclipse).
  2. Write a program reading documents such as sklep_ns.xml which will take a category id as an argument and print: the name (nazwa) and the price (cena) of the cheapest article (towar) in the given category.

Valid XHTML 1.1Valid CSS