JAXB. Java Architecture for XML Binding.

Ähnliche Dokumente
XML Schema und Objektorientierung

<< Java Architecture for XML Binding >>

XSD - XML Schema Definition

Java API for XML Binding

Angewandte Softwareentwicklung Serialisierung

WebServices -reloaded-

XML, FI und JSON strukturiert in Java verwenden. Wolfgang Nast

JAXB 2.0. Samuel Michaelis, Wolfgang Schmiesing. Ein Programmiertutorial für die Java Architecture for XML Binding ISBN

Programmieren II SAX. Beispiel-Schema kontakt.xsd SAX DOM. Dr. Klaus Höppner JAXB. Hochschule Darmstadt SS 2008

XML Schema vs. Relax NG

XML Schema 2015 S h_da S Seite 1

a) Erklären Sie, was die folgenden Eigenschaften eines XML-Dokumentes aussagen? wohlgeformt gültig

Nonstandard Datenbanken

Interface Spezifikation exotargets LS

Technische Richtlinie

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Übungsblatt 6 Ausgabe: Prof. Dr. Dr. Lars Schmidt-Thieme, André Busche SoSe 2012

XML Binding APIs XML Beans & JAXB

Methoden und Wrapperklassen

D#32058 Spezifikation UPOC DM V2

Extraktion von Metainformationen

Vorkurs Informatik WiSe 16/17

XML Schema 2015 S h_da S Seite 1

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Matrikelnummer: Bitte Namen und Matrikelnummer auf jeder Seite der Vorgabe und allen Arbeitsblättern eintragen!

Softwareentwicklung in verteilten Umgebungen, Teil 6 Web Services (Coulouris et al., Kapitel 19) Dieter Schmalstieg

Berner Fachhochschule Software Schule Schweiz JDOM. Beatrice Amrhein. Oktober 06

Analyse der Datenkommunikation zur drahtlosen Steuerung eines NAO Roboters durch ein Android Gerät

TU Wien. XML Data Binding. Business Informatics Group Institut für Softwaretechnik und Interaktive Systeme. Peter Gerstbach. Bakkalaureatsarbeit

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Java Einführung Klassendefinitionen

Java: Kapitel 9. Java und XML. Programmentwicklung WS 2008/2009. Holger Röder

Computeranwendung und Programmierung (CuP)


Übungsblatt 1. Java Vorkurs (WS 2017)

Einstieg in die Informatik mit Java

Vorkurs Informatik WiSe 17/18

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

Selbststudium Programmieren & Algorithmen OOP1 FS13 Hochschule Luzern Technik & Architektur

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Lernteam OOP3 SW Programmieren 1 - H1103 Felix Rohrer

Einführung in C. EDV1-04C-Einführung 1

Wie entwerfe ich ein Programm?

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Grundelemente objektorientierter Sprachen (1)

XML-Parser. Parser. Heutige Vorlesung. Grundlegende Architektur. Kategorien von Parser

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Grundelemente objektorientierter Sprachen (1)

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Web Service Entwicklung mit Java. Sven Lindow

Christian Kühl. Von JDO zu JPA Entwicklung einer Migrationsstrategie

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Transkript:

JAXB Java Architecture for XML Binding http://jaxb.java.net

Warum JAXB? JAXB ist eine schnelle und einfache Methode, um ein XML Schema mit einer Java Repräsentation zu verbinden. Damit ist es sehr einfach, XML Daten nach Java einzulesen, dort zu verarbeiten und wieder nach XML abzuspeichern. JAXB kann als Ersatz für DOM oder SAX benutzt werden. Die Programmierdetails für das Lesen und Schreiben der XML Daten bleiben verborgen. Wir müssen keine neuen Befehle kennen lernen. Der Zugriff auf die Daten erfolgt nach den Relationen, wie sie im XML Schema definiert sind.

Die Architektur von JAXB 2.0

Binding Erzeugen der Java Klassen xjc.exe -p pge schema.xsd d out Kompilieren der Java Klassen javac out/pge/*.java Unmarshalling der XML Dokumente, Benutzen der generierten Objekte, Marshalling der Java Daten, Validierung,

Übersetzung verschiedener Basis-Datentypen XML-Datentyp xsd:string xsd:integer xsd:int xsd:long xsd:short xsd:decimal xsd:float xsd:double xsd:boolean xsd:byte xsd:datetime xsd:time xsd:date xsd:anysimpletype Java-Datentyp java.lang.string java.math.biginteger int long short java.math.bigdecimal float double boolean byte XMLGregorianCalendar XMLGregorianCalendar XMLGregorianCalendar java.lang.string

Das Beispiel Schema <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="people"> <xs:complextype> <xs:sequence> <xs:element name="person" type="persontype" maxoccurs="unbounded"/> <xs:element name="address" type="addresstype" maxoccurs="unbounded"/> </xs:sequence> </xs:complextype> </xs:element>...

Die erzeugten Java Klassen: People People List<PersonType> person; List<AddressType> address; List <PersonType> getperson() List <AddressType> getaddress() Die erzeugten Klassen-Attribute mit Zugriffsfunktionen

Die erzeugten Java Klassen: PersonType PersonType NameType name BornType born NameType getname() void setname(nametype) BornType getborn() void setborn(borntype) String getprofession()... <xs:complextype name="persontype"> <xs:sequence> <xs:element name="name" type="nametype"/> <xs:element name="born" type="borntype"/> <xs:element name="died" type="diedtype"/> </xs:sequence> </xs:complextype>

Marshalling / Unmarshalling Java XML / XML Java

Der Unmarshaller Das JAXBContext-Objekt erstellt einen Zugriff zum JAXB API. Damit wird ein Unmashaller erzeugt. try{ JAXBContext jc = JAXBContext.newInstance( ClassName ); Unmarshaller u = jc.createunmarshaller(); Object obj = u.unmarshal( InputStream File DocNode... )... } catch(jaxbexception e) {... }

Validierung Vor dem Lesen der XML Daten kann mit dem Unmarshaller ein Schema verknüpft werden. SchemaFactory schemafactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemafactory.newschema(new File("People.xsd")); unmarshaller.setschema(schema);

Lesen der XML Daten Der Unmarshaller liefert dann ein Objekt des Typs PeopleType (gemäss dem Root-Element der XML Struktur). Object obj = u.unmarshal(... )); PeopleType people = (PeopleType) obj;

Navigation durch die Daten Die generierten get-methoden liefern die weiteren Elemente for(persontype b : people.getperson()) { String firstname = b.getname().getfirstname(); String lastname = b.getname().getlastname(); }

Der Marshaller Zum Schreiben der Daten nach XML erzeugen wir ein JAXBContext und damit ein Marshaller Objekt. JAXBContext jc = JAXBContext.newInstance(ClassName); Marshaller ms = jc.createmarshaller(); ms.setproperty( Marshaller.JAXB_FORMATTED_OUTPUT, true ); // Formatiertes Schreiben der Daten ms.marshal( people, new FileOutputStream( FileName ));

Validierung Auch der Marshaller kann durch Setzen eines Schemas validierend gemacht werden. SchemaFactory sf = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = sf.newschema( SchemaFile ); marshaller.setschema(schema);

Customizing Anpassen der Java Klassen Namen

Definieren der generierten Klassen Im Schema können die gewünschten (Ziel-) Klassen Namen definiert werden: <xs:complextype name="addresstype"> <xs:annotation> <xs:appinfo> <jxb:class name="address"/> </xs:appinfo> </xs:annotation>... </complextype>

Definieren der Membervariablen Ebenso die gewünschten (Ziel-) Membervariablen <xs:attribute name="id" type="xs:string"> <xs:annotation> <xs:appinfo> <jxb:property name="addressid"/> </xs:appinfo> </xs:annotation>... </xs:attribute>

Externes Binding Konfigurations-File Die hobby-elemente der Personen sollen in einer Member-Variablen hobbylist abgelegt werden: <jxb:bindings node="//xs:complextype[@name='persontype']"> <jxb:bindings node=".//xs:element[@name='hobby']"> <jxb:property name="hobbylist"/> </jxb:bindings> </jxb:bindings>

Bindings File Die name-elemente der Personen sollen in einer Klasse Name abgelegt werden <jxb:bindings node="//xs:complextype[@name='nametype']"> <jxb:class name="name"/> </jxb:bindings>

Erzeugen eines XML Schemas

Schemagen.exe Aus den Java Klassen lässt sich mit Hilfe von Annotations (@XmlType, @XmlElement, ) das dazu passende Schema generieren. Der Aufruf zum Erzeugen des Schemas lautet schemagen.exe package\*.java

Ein Beispiel: Die Klasse People // serialize all member variables @XmlAccessorType(XmlAccessType.FIELD) // in the following order @XmlType( proporder = { "person", "address" }) // people is the root element @XmlRootElement(name = "people") public class People { @XmlElement(required=true) protected List<PersonType> person; @XmlElement(required=true) protected List<AddressType> address; } public List<PersonType> getperson() {... } public List<AddressType> getaddress() {... }

Das erzeugte Schema <?xml version="1.0" encoding="utf-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="people"> <xs:complextype> <xs:sequence> <xs:element name="person" type="persontype" maxoccurs="unbounded"/> <xs:element name="address" type="addresstype" maxoccurs="unbounded"/> </xs:sequence> </xs:complextype> </xs:element>...

Die Klasse Address @XmlType( name = "addresstype", proporder = { "country", "city }) public class Address { @XmlAttribute(required=true) private String id @XmlElement(name="country", required=true) private String country @XmlElement(required=true) private String city; } public String getid() {... } public void setid(string value) {... } public String getcountry() {... } public void setcountry(string value) {... }...

Das erzeugte Schema <xs:complextype name="peopletype"> <xs:sequence> <xs:element name="person" type="persontype" maxoccurs="unbounded"/> <xs:element name="address" type="addresstype" maxoccurs="unbounded"/> </xs:sequence> </xs:complextype> <xs:complextype name="addresstype"> <xs:sequence> <xs:element name="country" type="xs:string"/> <xs:element name="city" type="xs:string"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> </xs:complextype>...

Marshalling ohne Object Factory