laboratorio di servizi web - xml2 - ardissono 1 xml schema - i per la descrizione di xml schema, far...

64
Laboratorio di Servizi We b - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation, 2 May 2001 http://www.w3.org/TR/xmlschema- 0/ (copia cartacea disponibile in biblioteca)

Upload: elpidio-carella

Post on 02-May-2015

228 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

1

XML Schema - I

Per la descrizione di XML schema, far riferimento a XML Schema Part 0:

Primer

W3C Recommendation, 2 May 2001

http://www.w3.org/TR/xmlschema-0/

(copia cartacea disponibile in biblioteca)

Page 2: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

2

XML Schema - II

Sintassi per specifica di struttura di documenti XML (documenti, strutture dati, ontologie, ...)

• più recente di DTD, specifica grammatica per rappresentazione di documenti XML– specifica struttura dei dati

– specifica tipo del contenuto dei dati

• DTD specifica struttura dati, ma non contenuto

– <!ELEMENT price (#PCDATA)>

– <price>6.90</price>

– <price>ciao</price>

OK!!!!PCDATA!!!!

Page 3: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

3

XML Schema - III• definizione struttura di elementi dei documenti

– tipi semplici (tipi XML built-in e derivati)– tipi complessi (definiti combinando tipi semplici)

• permette di specificare elementi del documento necessari, opzionali, …

• XML schema è un documento XML, di estensione .xsd (W3C) o .xml (Microsoft)

• Es: coffeeOrder.xsd definisce struttura di documenti XML che descrivono ordini di caffè

• NB: esistono proposte di standard di rappresentazione da parte di Microsoft, W3C e altri. Noi vediamoW3C

Page 4: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

4

address.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name=“billTo" type=“Address"/><xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/></xsd:complexType>

<?xml version="1.0"?><billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city></billTo>

<billTo country="Italy"> <street>123 via Po</street> <name>Paolo Bianchi</name> <city>Torino</city></billTo>

Page 5: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

5

Esempio di documento - coffeeOrd.xml<?xml version="1.0"?><coffeeOrder orderDate="1999-10-20"> <billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> <items> <item partNum="242-NO" >

<coffeeName>Lavazza Oro</coffeeName> <quantity>5</quantity> <price>19.99</price> </item>

<item partNum="242-MU" > <coffeeName>Nescafe</coffeeName> <quantity>3</quantity> <price>19.98</price> </item>

</items></coffeeOrder>

Page 6: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

6

coffeeOrder.xsd - I

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="coffeeOrder" type="CoffeeOrderType"/>

<xsd:complexType name="CoffeeOrderType"> <xsd:sequence> <xsd:element name="billTo" type="Address"/> <xsd:element name="items" type="Items"/> <xsd:element name=”comment" type=”xsd:string” minOccurs= ”0"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/></xsd:complexType>

XML namespace

Dichiarazione elemento XML

Dichiarazione di tipodi dati complesso:

sequenza di elementi fissa, simile a record

dei linguaggi di programmazione

Dichiarazione attributo di elementi di tipo CoffeeOrderType

Page 7: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

7

coffeeOrder.xsd - II

<xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/></xsd:complexType>

• elementi del complexType sono obbligatori• elementi devono apparire nei documenti nell’ordine

specificato dal complexType• complexType definibili a partire da simpleType e altri

complexTypes (es: CoffeeOrderType usa Address, date, ...)• attributi possono solo essere di tipo simpleType

<billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city></billTo>

Page 8: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

8

coffeeOrder.xsd - III<xsd:complexType name="Items"> <xsd:sequence>

<xsd:element name="item" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="coffeeName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="partNum" type="xsd:string" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence></xsd:complexType></xsd:schema>

Sequenza di elementivariabile: contiene

almeno un item

Dichiarazione anonymousdi un tipo di dato complesso

<item partNum="242-MU" > <coffeeName>Nescafe</coffeeName> <quantity>3</quantity> <price>19.98</price></item>

Page 9: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

9

coffeeOrder.xsd - IV<xsd:complexType> <xsd:sequence> <xsd:element name="coffeeName" type="xsd:string"/> <xsd:element name="quantity">

<xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="partNum" type="xsd:string" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence></xsd:complexType>

Dichiarazione anonymousdi tipo di dato semplice

Dichiarazione diattributo necessario

Page 10: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

10

Vincoli di occorrenza di elementi e attributi

• specificano min e max occorrenze di elementi. Es:

<xsd:complexType name=”AnnotatedOrder"> <xsd:sequence> ... <xsd:element name=”comment" type=”xsd:string” minOccurs= ”0"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/></xsd:complexType>

• Se non specificati, minOccurs=maxOccurs=1• <xsd:element name=”comment" type=”xsd:string” minOccurs= ”0”

maxOccurs= ”3"/>

• Per attributi, minOccurs >= 0; maxOccurs =1

Elemento opzionale

Page 11: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

11

Attributi: Valori di default

• Specificano valore assunto da attributo quando non specificato in documento XML. Es:

<xsd:complexType name="Address">

….

<xsd:attribute name="country" type="xsd:string” minOccurs=”0” default=“Italy”/>

</xsd:complexType>

• Si può specificare valore di default per i soli attributi opzionali

Page 12: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

12

Attributi: Valori fissi

• Impongono valore fisso: se attributo specificato in documento XML, deve avere quel valore. Se omesso, valore associato automaticamente ( attributo opzionale)

<xsd:complexType name="Address">

...

<xsd:attribute name="country" type="xsd:string” fixed=“Italy”/>

</xsd:complexType>

• Default value e fixed values sono mutuamente esclusivi

Page 13: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

13

Tipi di dati semplici (simpleType) - I• Tutti i tipi XML base (string, float, date, …)• Tipi derivati da tipi built-in e derivati stessi

– per restrizione<xsd:simpleType name=”MyInteger"> <xsd:restriction base=“xsd:integer”> <xsd:minInclusive value=”0"/> <xsd:maxInclusive value=”9"/> </xsd:restriction></xsd:simpleType>

– per enumerazione<xsd:simpleType name=”Città"> <xsd:restriction base=“xsd:string”> <xsd:enumeration value=”Torino"/> <xsd:enumeration value=”Milano"/> <xsd:enumeration value=”Venezia"/> </xsd:restriction></xsd:simpleType>

Si possono anchefare restrizioni perpattern (espressioni

regolari)

Page 14: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

14

Tipi di dati semplici (simpleType) - II• Liste di elementi di tipi semplici (NON di complessi o di

altre liste)<xsd:element name=”lista" type=”MyListType"/>

<xsd:simpleType name=”MyListType"> <xsd:list itemType=“xsd:myInteger”></xsd:simpleType>

• Si può specificare lunghezza fissa, minima, massima della lista, mediante restrizione

<xsd:simpleType name=”SeiNumeri"> <xsd:restriction base=“MyListType”> <xsd:length value=“6”> </xsd:restriction></xsd:simpleType>

Facets: length

minLengthmaxLength

<lista>0 3 2 8 9 6 7 2 4 1</lista>

Page 15: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

15

Tipi di dati complessi (complexType) - I• Estensioni di tipi semplici (associo attributi a tipi semplici)<xsd:element name=”prezzo"/> <xsd:complexType> <xsd:simpleContent> <xsd:extension base=“xsd:decimal”> <xsd:attribute name=”valuta" type="xsd:string”/> </xsd:extension> </xsd:simpleContent> </xsd:complexType></xsd:prezzo>

• Tipi complessi vuoti (senza elementi, solo attributi)<xsd:element name=”prezzo" type=”InternationalPrice"/> <xsd:complexType name=”InternationalPrice"> <xsd:attribute name=”valuta" type="xsd:string”/> <xsd:attribute name=”valore" type="xsd:decimal”/></xsd:complexType>

<prezzo valuta=”EUR”>35,7</prezzo>

<prezzo valuta=”EUR” valore=“35,7”/>

Page 16: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

16

Tipi di dati complessi - II• Raggruppamento di elementi: sequence e choice

<xsd:element name=”billTo" type=”Address"/> /> <xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> ... <xsd:choice> <xsd:element name="street" type="xsd:string"/> <xsd:element name=”PO-BOX" type="xsd:string"/> </xsd:choice></xsd:sequence> ...</xsd:complexType>

<billTo country=”Italy" > <name>Carla Verdi</name> <city>Roma</city> <PO-BOX>125</PO-BOX></billTo>

Gli elementi dichoice sono mutuamenteesclusivi nei

documenti XML

<billTo country=”GB" > <name>Paul Bley</name> <city>Londra</city> <street>Oxford Street</street></billTo>

Page 17: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

17

Derivazione di tipi complessi

Per rappresentazione compatta dei dati e riutilizzazione di definizioni di tipi di dati

• derivazione per estensione• derivazione per restrizione• si possono anche ridefinire tipi di dati, ma

trascuriamo

Page 18: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

18

Derivazione di tipi complessi per estensione

Aggiungocampi“region”e “zip”

<xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/></xsd:complexType>

<xsd:complexType name=”USAddress"> <xsd:complexContent> <extension base=“Address”> <xsd:sequence> <xsd:element name=”region" type="xsd:string"/> <xsd:element name=”zip" type=”positiveInteger"/> </xsd:sequence> </xsd:extension> </xsd:complexContent></xsd:complexType>

Page 19: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

19

Derivazione di tipi complessi per restrizione - I

Restrizione di vincoli di occorrenza<xsd:complexType name="Items” type=“itemType”> <xsd:sequence> <xsd:element name="item" minOccurs=”0" maxOccurs=”unbounded"> </xsd:sequence> </xsd:complexType>

<xsd:complexType name=”ConfirmedItems” type=“itemType”> <xsd:complexContent> <restriction base=“Items”> <xsd:sequence> <xsd:element name="item" minOccurs=”1" maxOccurs=”100"> </xsd:sequence> </xsd:restriction> </xsd:complexContent></xsd:complexType>

Restringocardinalitàmin e maxdi items

Page 20: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

20

Derivazione di tipi complessi per restrizione - II

Le restrizioni sono simili a quelle applicate ai tipi semplici …

Altri tipi di restrizione: • assegnazione di valore di default

• assegnazione di valore fisso

• restrizione di tipo (es: da anyType a positiveInteger)

• ...

Page 21: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

21

Divisione di XML schema su file diversi

Per gestire schemi grossi o condividere definizioni

• importazione di uno schema esterno<include

schemaLocation=“http://www.example.com/schemas/address.xsd”/>

• address.xsd definisce il complexType Address• schema importatore può dichiarare element di tipo

Address come se definizione fosse interna• uno schema può importare più schemi esterni

mediante clausole “include”

URI di shema

Page 22: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

22

Namespace – ancora …• Definisce spazio dei nomi per identificazione univoca di

etichette e tipi di dati– XML Schema namespace: specifica XML Schema W3C

– xsd:schema xmlns:xsd=“http://www.w3.org/2001/XMLSchema”

• tipi di dato built-in di XML: xsd:string, xsd:decimal, ...

• parole riservate: element, attribute, sequence, simpleType, complexType, restriction, …

– si possono definire altri namespace, che identificano spazio dei nomi di definizioni introdotte da noi. Es: “http://www.example.com/C-ORDER”

– default name space: permette di usare nomi unqualified: xmlns=“http://www.w3.org/2001/XMLSchema”

Page 23: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

23

Definizione e uso di Namespace - I

<schema xmlns:="http://www.w3.org/2001/XMLSchema” xmlns:co="http://www.example.com/C-ORDER” targetNamespace=“http://www.example.com/C-ORDER” >

<include schemaLocation=“http://www.example.com/schemas/address.xsd”/><element name="coffeeOrder" type=”co:CoffeeOrderType"/><complexType name="CoffeeOrderType"> <sequence> <element name="billTo" type=”co:Address"/> ... </sequence> <attribute name="orderDate" type="date"/></complexType> … </schema>

Defaultnamespace

Schema, element, string, …unqualified perchè definiti

in namespace di default

Nuovo namespace: C-ORDERInclusione schema (URI)

coffeeOrder.xsd

Page 24: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

24

Definizione e uso di Namespace - II

<schema xmlns="http://www.w3.org/2001/XMLSchema” xmlns:co="http://www.example.com/C-ORDER” targetNamespace=“http://www.example.com/C-ORDER” >

<complexType name="Address"> <sequence> ... </sequence> <attribute name="country" type="string"/></complexType>

</schema>

NB: definizioniappartengono a

namespace C-ORDER

coffeeOrder.xsd eaddress.xsd, insieme,

formano spaziodi nomi C-ORDERper definire ordini

di caffèaddress.xsd

Page 25: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

25

Validazione di documenti XML - I

Per validare un documento XML rispetto a schema bisogna specificare XML-schema di riferimento

Documento XML specifica i namespace usati– xmlns=“http://www.example.com/C-ORDER”, ...

– qualifica i nomi (di tipi di dati, di etichette, …) se necessario

validatore estrae definizioni per verificare correttezza sintattica del documento

Noi vediamo validazione (e gestione) di documenti XML in ambiente Java, basato su uso di JAXB

Page 26: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

26

Validazione di documenti XML - II<?xml version="1.0"?><co:coffeeOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance” xmlns:co="http://www.example.com/C-ORDER” orderDate="1999-10-20">

<billTo country="Italy"> <name>Paolo Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> <items> <item partNum="242-NO" >

<coffeeName>Lavazza Oro</coffeeName> <quantity>5</quantity> <price>19.99</price> </item>

</items></co:coffeeOrder>

Specificanamespaces

per validazione

myOrder.xml

Page 27: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

27

Java Architecture for XML Binding - I

per la descrizione di JAXB, vedere tutorial JWSDP1.1, JAXB:

http://www.educ.di.unito.it/intranet/dol/jaxb-1.0/docs/index.html

accedere alla user’s guide

Page 28: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

28

Java Architecture for XML Binding - II

Tecnologia Java volta a facilitare integrazione di XML in applicazioni Java

• Basata su idea di gestire documenti XML come oggetti appartenenti a classi Java che offrono metodi per ispezionare, modificare e creare oggetti

• Permette di– leggere, e modificare documenti XML validi trascurando

aspetti sintattici di XML– creare nuovi documenti XML e validarli rispetto a schemi

XML– Gestire documenti XML validi direttamente in Java, senza

passare a forma XML per validazione

Page 29: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

29

Processo di XML data binding• Dato XML schema, generare classi Java che

rappresentano strutture dati dichiarate in schema (gerarchia di classi Java associate a tipi semplici e complessi)

• Classi generate possono essere usate in applicazioni per gestire oggetti XML (content tree)– Unmarshal XML documents: lettura di un documenti

XML e generazione dei corrispondenti oggetti Java

– Marshal XML documents: creazione di documenti XML corrispondenti a oggetto Java

Page 30: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

30

Esempio: generazione classi da address.xsd<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name=”address" type=”Address"/>

<xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:NMTOKEN"/></xsd:complexType></xsd:schema>

Address.java

ObjectFactory.java jaxb.properties

...impl

address.xsd

Page 31: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

31

Rappresentazione Java di XML Schema - I

Definizioni di schema XML rappresentate in package che contiene

• java content interfaces: dichiarazioni di tipi di dati anonymous e non

• java Element interfaces: dichiarazioni di “element” dello schema, eventualmente inserite in liste di elementi

• Classi di tipi di dati enumerati: simple type definitions (con facets di enumerazione)

Page 32: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

32

Rappresentazione Java di XML Schema - II

• ObjectFactory class offre metodi per istanziare interfacce java che rappresentano oggetti XML

• package (impl) con classi che implementano interfacce

• property files: specificano associazioni di nomi a classi, ...

• javadoc package

Page 33: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

33

Interfaccia Address.java (generata) - Ipackage coffee1;/** * Java content class for Address complex type. * <p>The following schema fragment specifies the expected content contained

within this java content object. * <p> * <pre> * &lt;complexType name="Address"> * &lt;complexContent> * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> * &lt;sequence> * &lt;element name="name"

type="{http://www.w3.org/2001/XMLSchema}string"/> * &lt;element name="street"

type="{http://www.w3.org/2001/XMLSchema}string"/> * &lt;element name="city"

type="{http://www.w3.org/2001/XMLSchema}string"/> * &lt;/sequence> * &lt;attribute name="country"

type="{http://www.w3.org/2001/XMLSchema}NMTOKEN" /> * &lt;/restriction> * &lt;/complexContent> * &lt;/complexType> * </pre> */

Per javadoc

Page 34: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

34

Interfaccia Address.java (generata) - II

public interface Address {

java.lang.String getCountry();

void setCountry(java.lang.String value);

java.lang.String getCity();

void setCity(java.lang.String value);

java.lang.String getStreet();

void setStreet(java.lang.String value);

java.lang.String getName();

void setName(java.lang.String value);

}

Un metodo di get e unmetodo di set

per ogni componentedel tipo di dato

Address

getCountry()

setCountry()

getCity()

……..

Page 35: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

35

Classe AddressImpl.java (generata) - Ipackage coffee1.impl;

public class AddressImpl implements coffee1.Address, com.sun.xml.bind.unmarshaller.UnmarshallableObject, com.sun.xml.bind.serializer.XMLSerializable, com.sun.xml.bind.validator.ValidatableObject {

protected java.lang.String _Country;

protected java.lang.String _City;

protected java.lang.String _Street;

protected java.lang.String _Name;

private final static com.sun.msv.grammar.Grammar schemaFragment = com.sun.xml.bind.validator.SchemaDeserializer.deserialize(“…”);

private final static java.lang.Class PRIMARY_INTERFACE_CLASS() {

return coffee1.Address.class; }

In package impl, classe AddressImpl.java

implementametodi dichiaratiin Address.java

Page 36: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

36

Classe AddressImpl.java (generata) - II …..

public java.lang.String getCountry() { return _Country; }

public void setCountry(java.lang.String value) { _Country = value; }

public com.sun.xml.bind.unmarshaller.ContentHandlerEx getUnmarshaller(com.sun.xml.bind.unmarshaller.UnmarshallingContext context) {

return new coffee1.impl.AddressImpl.Unmarshaller(context);

}

Implementazione dei metodi di get e di set di tutti gli elementi dello schema

Page 37: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

37

Class AddressImpl.java (generata) - III

public void serializeElements(com.sun.xml.bind.serializer.XMLSerializer context) throws org.xml.sax.SAXException

{... }

public void serializeAttributes(com.sun.xml.bind.serializer.XMLSerializer context) throws org.xml.sax.SAXException

{... } ………

public class Unmarshaller extends com.sun.xml.bind.unmarshaller.ContentHandlerEx {... }

… etc etc}

Implementazione di Unmarshallerche interpreta documento XML e crea oggetto Java corrispondente

Page 38: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

38

Interfacce e classi generate

Interfacce e classi di implementazione generate da JAXB permettono ad applicazione java di – generare oggetti secondo struttura dei tipi di dati definita

in schema XML

– marshal e unmarshal tra XML e Java

– marshal di oggetto XML in DOM e altri formati

Compilato schema XML con JAXB Compiler, si possono gestire documenti XML validi rispetto a schema in ambiente Java senza usare SAX o altro

Page 39: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

39

Classe ObjectFactory.java

Offre metodi per creazione di (oggetti) istanze delle interfacce generate a partire dalle definizioni di tipi di dati e di elementi nello schema XML. Es: – ObjectFactory obj = new ObjectFactory();– Address ad = obj.createAddress();

• serve per generare oggetti che appartengono alle varie interfacce

• NB: una volta creati gli oggetti, si possono invocare i metodi degli oggetti per assegnare valori. Es: – ad.setCountry(“Italy”); – ad.setCity(“Torino”); ...

Page 40: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

40

Binding tra tipi di dati XML built-in e tipi Java

XML Schema Type Java Data Type

xsd:string java.lang.String

xsd:integer java.math.BigInteger

xsd:int int

xsd:double double

xsd:date java.util.Calendar

xsd:time java.util.Calendar

… …

Page 41: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

41

Architettura di JAXB - I

XMLschema

JAXBbinding

compiler

Bindingdeclarations

Applicazione

Codice di applicazione

Schemaderived

interfaces

JAXBPackages

javax.xml.bind

Schemaderived

Java classes

Bindingframework

implementation

XMLinput

documents

XMLoutput

documents

Unmarshal

Marshal

Page 42: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

42

Architettura di JAXB - II• Binding declarations: regole personalizzate di

traduzione di schema in classi Java (sovrascrivono regole standard di JAXB. Es: a che package java devono appartenere le classi generate, che nome dare a classi generate a partire da definizioni di tipo in XML schema,…)

• Binding compiler: compilatore che legge XML schema e genera le classi Java

• JAXB Packages: librerie JAXB

• JAXB Binding framework implementation: runtime API. Offre interfacce per fare marshalling, unmarshalling e validazione di documenti XML

Page 43: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

43

package javax.xml.bind - I

• Definisce classi astratte e interfacce usate (e implementate) in classi Java generate– Unmarshaller: interpreta documenti XML e costruisce

content tree (oggetto Java che corrisponde a documento XML)

– Validator: valida oggetti XML rispetto a schema XML

– Marshaller: genera documento XML che corrisponde a content tree

– gerarchia di classi evento ed eccezione usate durante marshal, unmarshal e validazione

Page 44: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

44

package javax.xml.bind - II

– Classe JAXBContext• gestisce corrispondenze tra nomi di elementi XML e

interfacce generate da XML schema

• fornisce astrazione per gestire informazioni di binding usate in implementazione di operazioni marshal, unmarshal e validate

• applicazione java che vuole usare classi generate da JAXB compiler deve usare istanza di JAXBContext:

– JAXBContext jc = JAXBContext.newInstance(contextPath);

– contextPath: lista di nomi di package che contengono interfacce derivate da XML schema

Page 45: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

45

Esempio di uso di JAXB

• Generazione di classi Java per schema coffeeOrder.xsd

• Compilazione classi generate

• Sviluppo di applicazione java che usa classi per – leggere documenti XML

– modificarne contenuto

– generare documenti XML

• CLASSPATH: deve contenere classi di gestione di XML (parser XML, …) e compilatore JAXB (il vostro classpath è già a posto)

Page 46: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

46

Uso di JAXB - SUGGERIMENTI

JAXB, specialmente nella versione che state usando voi, non funziona perfettamente (le versioni più recenti sono migliori). Onde evitare di lottare contro i suoi bachi suggerisco di:

• Non definire mai tag XML che corrispondono a parole riservate (per esempio, “add”)

• Non definire mai tipi di dati (complexType, simpleType) con nomi che corrispondono, a meno di maiuscole e minuscole, a parole riservate o a nomi di tag definiti nello schema (es: element “address”, complexType “Address”)

• Inoltre, ma questo non è dovuto a bachi, l’elemento principale di uno schema DEVE avere lo stesso nome del file xsd (es: element “indirizzo” deve stare in file “indirizzo.xsd”)

Page 47: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

47

coffeeOrder.xsd - I<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name="coffeeOrder" type="CoffeeOrderType"/>

<xsd:complexType name="CoffeeOrderType"> <xsd:sequence> <xsd:element name="billTo" type="Address"/> <xsd:element name="items" type="Items"/> </xsd:sequence> <xsd:attribute name="orderDate" type="xsd:date"/></xsd:complexType>

<xsd:complexType name="Address"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string"/></xsd:complexType>

Page 48: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

48

coffeeOrder.xsd - II<xsd:complexType name="Items"> <xsd:sequence> <xsd:element name="item" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="coffeeName" type="xsd:string"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="partNum" type="xsd:string" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence></xsd:complexType>

</xsd:schema>

Page 49: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

49

Compilazione schema XML

• Sintassi di invocazione di JAXB compiler (xjc):$JAXB_HOME/bin/xjc.sh XMLSchemaName -p packageName

– xjc: alias per invocazione di compilatore (va invocato essendo posizionati sulla directory D in cui c’è lo schema)

– Es: xjc coffeeOrder.xsd -p coffee1

Codice eseguibile delcompilatore JAXB

File XML-schemada compilare

Nome package in cuisalvare le classi

generate

•crea directory coffee1 (all’interno di D)•genera interfacce in directory coffee1

•crea directory impl in D/coffee1•genera implementazioni in directory coffee1/impl

Page 50: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

50

Classi generate sotto coffee1 e coffee1/impl

Page 51: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

51

Compilazione interfacce e classi generate

• Interfacce e classi generate devono essere compilate come normali classi Java– javac *.java impl/*.java

• Poi possono essere usate in altri programmi, MA:– non è permesso generare direttamente oggetti a

partire dalle interfacce, con “new”

Address ad = new Address();

– per generare oggetti di tali classi bisogna usare metodi offerti da ObjectFactory (vd dopo)

Page 52: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

52

Applicazione java che crea documento XML contenente un indirizzo (Address)

Sviluppiamo applicazione CreaAddress.java che

• Crea oggetto di tipo Address e ne istanzia le variabili

• produce file indirizzo.xml che contiene l’indirizzo in formato XML

• NB: Address è una delle classi generate dal compilatore JAXB, non necessariamente il tipo dell’elemento principale dello schema

Page 53: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

53

CreaAddress.java - I

import java.io.FileInputStream;import java.io.IOException;import java.math.BigDecimal;import java.math.BigInteger;import java.util.*;import java.io.*;

import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.UnmarshalException;import javax.xml.bind.Unmarshaller;import javax.xml.bind.ValidationEvent;import javax.xml.bind.util.ValidationEventCollector;

import coffee1.*;

Importo package coffee1per usare classi

generateda compilatore

JAXB

Page 54: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

54

CreaAddress.java - II

public class CreaAddress{

public static void main( String args[] ) { try { JAXBContext jc = JAXBContext.newInstance( “indirizzo1" );

ObjectFactory objFactory = new ObjectFactory(); Address ad = objFactory.createAddress(); // set properties on it ad.setName( “Giorgio” ); ad.setStreet( “via Po” ); ad.setCity( “Torino” );

… continua …

Creo contesto JAXB pergestione di classi in coffee1

NB: creazione di oggetto Address NON si fa con“new”:

si usa metodo di creazioneofferto da ObjectFactory

Usare nome di packageindicato in fase di compilazione

con JAXB compiler

Page 55: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

55

CreaAddress.java - III … continua …

Marshaller m = jc.createMarshaller();

m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

m.marshal(ad, System.out);

OutputStream os = new FileOutputStream(“indirizzo.xml"); m.marshal(ad, os);

} catch( UnmarshalException ue ) {System.out.println( "Caught UnmarshalException" );} catch( JAXBException je ) {je.printStackTrace();} catch( IOException ioe ) {ioe.printStackTrace();}

}

Creo Marshaller pergenerazione XML e

metto a true propertydi formattazione linee

Marshal: genero XML documentsu standard output

Marshal: genero XML documentsu file di output

Catturo eccezioniJAXB, Unmarshall, ...

Page 56: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

56

Applicazione java che legge da file XML, modifica e riscrive nuovo file XML

Sviluppiamo applicazione TestCoffee.java che

• legge ordine di caffè (order1.xml)• estrae indirizzo del destinatario e stampa

informazioni a video• estrae lista di item ordinati• aggiunge un nuovo item all’ordine• produce nuovo ordine, in file prova.xml di output

Page 57: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

57

order1.xml <?xml version="1.0"?><coffeeOrder orderDate="1999-10-20"> <billTo country="Italy"> <name>Chiara Bianchi</name> <street>123 via Po</street> <city>Torino</city> </billTo> <items> <item partNum="242-NO" >

<coffeeName>Lavazza Oro</coffeeName> <quantity>5</quantity> <price>19.99</price> </item>

<item partNum="242-MU" > <coffeeName>Nescafe</coffeeName> <quantity>3</quantity> <price>19.98</price> </item>

<item partNum="242-GZ" > <coffeeName>Kimbo</coffeeName> <quantity>3</quantity> <price>27.95</price> </item></items>

</coffeeOrder>

Usiamo JAXBper interpretaree validare questodocumento XML,e per modificarlo

Page 58: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

58

TestCoffee.java - I

import java.io.FileInputStream;import java.io.IOException;import java.math.BigDecimal;import java.math.BigInteger;import java.util.*;import java.io.*;

import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;import javax.xml.bind.UnmarshalException;import javax.xml.bind.Unmarshaller;import javax.xml.bind.ValidationEvent;import javax.xml.bind.util.ValidationEventCollector;

import coffee1.*;

Page 59: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

59

TestCoffee.java - IIpublic class TestCoffee{ public static void main( String[] args ) { try { JAXBContext jc = JAXBContext.newInstance( "coffee1" ); Unmarshaller u = jc.createUnmarshaller(); u.setValidating( true ); CoffeeOrderType co = (CoffeeOrderType)u.unmarshal( new FileInputStream( "order1.xml" )); Address ad = co.getBillTo();

System.out.println(“Nome: “ + ad.getName()); Items itemList = co.getItems(); List items = itemList.getItem(); Items.ItemType i = newItem("Vergnano", new BigInteger("4"),

new BigDecimal("21.00"), "NND980"); items.add(i); Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

m.marshal(co, System.out); OutputStream os = new FileOutputStream("prova.xml"); m.marshal(co, os);

} catch( UnmarshalException ue ) {System.out.println( "Caught UnmarshalException" );} catch( JAXBException je ) {je.printStackTrace();} catch( IOException ioe ) {ioe.printStackTrace();}

}

Page 60: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

60

TestCoffee.java - III public class TestCoffee{ public static void main( String[] args ) { try { JAXBContext jc = JAXBContext.newInstance( "coffee1" ); Unmarshaller u = jc.createUnmarshaller(); u.setValidating( true );

CoffeeOrderType co = (CoffeeOrderType)u.unmarshal( new FileInputStream( "order1.xml" ));

------>>>>> continua

Creo contesto JAXB pergestione di classi in coffee1

Creo Unmarshaller

Abilito validazione XML

Parsificazione documentoorder1.xml e creazione

oggetto java

NB: JAXB fa sempre validazionedi documento, durante unmarshal.

Documento validato rispetto aschema XML grazie a castsu classe corrispondente

Page 61: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

61

TestCoffee.java - IV Address ad = co.getBillTo();

System.out.println(“Nome: “ + ad.getName()); … stampare gli altri campi dell’indirizzo …

Items itemList = co.getItems();

List items = itemList.getItem();

Items.ItemType i = newItem("Vergnano", new BigInteger("4"), new BigDecimal("21.00"), "NND980");

items.add(i);

Estraggo indirizzo da elemento ditipo CoffeeOrderType

Estraggo campi di oggetto di tipo Address

Estraggo elemento Items(che racchiude lista di Item)

Estraggo lista di elementidi tipo Item

Creo nuovo item, usando un mio metodo newItem e aggiungo item a lista

Page 62: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

62

TestCoffee.java - V Marshaller m = jc.createMarshaller();

m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

m.marshal(co, System.out);

OutputStream os = new FileOutputStream("prova.xml"); m.marshal(co, os);

} catch( UnmarshalException ue ) {

System.out.println( "Caught UnmarshalException" ); } catch( JAXBException je ) { je.printStackTrace(); } catch( IOException ioe ) { ioe.printStackTrace(); } }

Creo Marshaller pergenerazione XML

Marshal: genero XML documentsu standard output

Marshal: genero XML documentsu file di output

Catturo eccezioniJAXB, Unmarshall, ...

Page 63: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

63

TestCoffee.java - VI

public static Items.ItemType newItem(String name, BigInteger quantity, BigDecimal price, String partNum)

throws JAXBException { // create an empty ItemType objectObjectFactory objFactory = new ObjectFactory();

Items.ItemType item = objFactory.createItemsItemType();

// set properties on it item.setCoffeeName( name ); item.setQuantity( quantity ); item.setPrice( price ); item.setPartNum( partNum );

// return it return item; }}

Page 64: Laboratorio di Servizi Web - XML2 - Ardissono 1 XML Schema - I Per la descrizione di XML schema, far riferimento a XML Schema Part 0: Primer W3C Recommendation,

Laboratorio di Servizi Web - XML2 - Ardissono

64

Esercizi di uso di JAXB

Tutorial in linea (JAXB User’s Guide) riporta esempi di applicazioni che usano classi generate da JAXB per interpretare e generare documenti XML

Si veda la sezione Using JAXB

http://www.educ.di.unito.it/intranet/dol/jwsdp-1.1/jaxb-1.0/docs/users-guide/jaxb-all.pdf