JAXB mit XML Schema

JAXB mit XML Schema

XML ist ein wichtiges Datenformat, das beim Datenaustausch zwischen verschiedenen Applikationen oder Unternehmen zum Einsatz kommt.

Angenommen, wir hätten die dargestellte Java-Klasse "Mensch" samt deren Annotations nicht greifbar, sondern uns stünde lediglich der Zugriff auf das XML Dokument "jaxb_demo.xml" sowie auf ein XML Schema zu Verfügung.

In diesen Fällen werden häufig mittels "xjc.exe" aus dem XML Schema mehrere Java-Klassen generiert. Mit diesem Quellcode werden anschließend die XML-Dokumente eingelesen und in Java-Objekte übernommen.

Im vorliegenden Fall müßte das XML-Dokument "<ns3:MENSCH xmlns:ns3='wilfried-grupe.de/jaxb'>" eingelesen und in ein Java-Objekt der via "xjc.exe" generierten Klasse "MENSCHTYP" überführt werden. Der Entwurf des XML Schema verteilt sich aufgrund der verwendeten Namespaces auf drei verschiedene Dateien:


<?xml version="1.0" encoding="utf-8"?>
<xs:schema
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="vorname" type="xs:string"/>
  <xs:element name="nachname" type="xs:string"/>
  <xs:element name="NN" type="xs:string"/>
  <xs:element name="VN" type="xs:string"/>
  <xs:element name="age" type="xs:nonNegativeInteger"/>
</xs:schema>

Datei: "Mensch_jaxb_2.xsd"


<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="wilfried-grupe.de/jaxb/demo"
           xmlns:ns2="wilfried-grupe.de/jaxb/demo"
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:attribute name="HOBBY" type="xs:string"/>
  <xs:attribute name="ALTER1" type="xs:nonNegativeInteger"/>
  <xs:attribute name="ALTER2" type="xs:nonNegativeInteger"/>
</xs:schema>

Datei: "Mensch_jaxb_ns2.xsd"


<?xml version="1.0" encoding="utf-8"?>
<xs:schema
  targetNamespace="wilfried-grupe.de/jaxb"
  xmlns:ns3="wilfried-grupe.de/jaxb"
  xmlns:ns2="wilfried-grupe.de/jaxb/demo"
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import namespace="wilfried-grupe.de/jaxb/demo" 
       schemaLocation="Mensch_jaxb_ns2.xsd"/>
  <xs:import schemaLocation="Mensch_jaxb_2.xsd"/>
  <xs:complexType name="MENSCH_TYP">
    <xs:sequence>
      <xs:element ref="nachname"/>
      <xs:element ref="NN"/>
      <xs:element ref="vorname"/>
      <xs:element ref="VN"/>
    </xs:sequence>
    <xs:attribute ref="ns2:HOBBY" use="required"/>
    <xs:attribute ref="ns2:ALTER1" use="required"/>
    <xs:attribute ref="ns2:ALTER2" use="required"/>
  </xs:complexType>
  <xs:element name="MENSCH" type="ns3:MENSCH_TYP"/>
</xs:schema>

Datei: "Mensch_jaxb.xsd"

Nachdem mit Hilfe von "xjc.exe Mensch_jaxb.xsd" nun das Java-Package "de.wilfried_grupe.jaxb" und die Klassen "package-info.java", "ObjectFactory.java" und "MENSCHTYP.java" generiert wurden (aus Platzgründen spare ich mir den Abdruck des Quellcodes), ist der weitere Ablauf analog wie oben dargestellt.

Damit besteht durchaus die Möglichkeit, mittels "xjc.exe" via XML Schema Klassen zu generieren, einen XML-Stream in dessen Objekt ("jaxbp") zu unmarshallen und deren Werte auf das eigentliche Zielobjekt der Klasse "Person" zu mappen.

wg / 4. Dezember 2017



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info2018@wilfried-grupe.de

www.wilfried-grupe.de/Datenaustausch5.html