Vánoční hrátky s JAXB

Podobné dokumenty
Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Schéma XML pro výměnu dokumentů a jejich metadat

Příloha č. 1E národního standardu pro elektronické systémy spisové služby

UJO Framework. revoluční architektura beans. verze

X36DSV 3. cvičení. XML (extensible Markup Language) JavaScript. AJAX (Asynchronous JavaScript and XML) X36DSV. 2007/10 ver.2.0 1

API pro práci s XML. Jirka Kosek. Poslední modifikace: $Date: 2014/12/17 17:15:28 $ Copyright Jiří Kosek

Java a XML. 10/26/09 1/7 Java a XML

Obsah prezentace. Co je to XML? Vlastnosti. Validita

Příloha č. 1D národního standardu pro elektronické systémy spisové služby

DATOVÝ STANDARD O ODPADECH

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Aplikace SDNS. XML struktura pro nahrání dat ze souboru. Příručka uživatele (programátora) Sekce informatiky Odbor informačních systémů. verze 1.

Požadavky pro výběrová řízení TerraBus ESB/G2x

DATOVÝ STANDARD O ODPADECH

Popis XML rozhraní Veřejného webu RŽP

RES Partner uživatelská dokumentace

DATOVÝ STANDARD O ODPADECH

XML schémata. Agenda. Přínosy použití schématu. Proč potřebujeme schéma dokumentů XML. Tutoriál. Agenda. proč a nač jsou schémata

Úvod do programovacích jazyků (Java)

IRAE 07/08 Přednáška č. 1

Přehled změn v XSD aplikace SSZ pro dodávku D8.1.0 Rámcová smlouva na Rozvoj a údržbu Informačního systému katastru nemovitostí v letech

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

Programování v Javě I. Leden 2008

Obsah HE0084/ :45:06

Tvorba informačních systémů

podnikatele ve formě PDF dokumentu nebo budou jednotlivé datové položky rozvedeny v XML subelementech.

Programování v Javě I. Únor 2009

Platformy / technologie. Jaroslav Žáček

Popis XML rozhraní Veřejného webu RŽP

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

Úvod do Web Services

SOAP & REST služby. Rozdíly, architektury, použití

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Web Services na SOAP

Michal Krátký. Tvorba informačních systémů, 2008/2009. Katedra informatiky VŠB Technická univerzita Ostrava. Tvorba informačních systémů

Tvorba informačních systémů

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Co je nového v Java EE 6

Návrh softwarových systém. Návrh softwarových systémů

<xs:maxlength value="50"/> </xs:restriction> </xs:simpletype>

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Životní cyklus služby v SOA a popis webových služeb

České vysoké učení technické v Praze Fakulta elektrotechnická. Diplomová práce. SNMP/XML brána. Michal Trešo. Vedoucí práce: Ing.

Technologie Java. Jaroslav Žáček

Úvod do Groovy pro Java experty

8 Třídy, objekty, metody, předávání argumentů metod

Podrobný popis GovTalk obálky

Principy objektově orientovaného programování

Příloha č. 3 Webové služby

Aleš Rybák, Jiří Kadlec. Pluginy budoucnosti

Úvod do XML Technologie

JAVA Moduly Java, letní semestr 2018

ADT/ADS = abstraktní datové typy / struktury

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Správa VF XML DTM DMVS Datový model a ontologický popis

Výměnný formát XML DTM DMVS PK

Teoretické a pokročilé aspekty XML technologií

Platformy / technologie. Jaroslav Žáček jaroslav.zacek@osu.cz

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Programování v C++ 2, 4. cvičení

Datové rozhraní ISOŘ KADR

Předmluva k druhému vydání 13. Úvod 17. ČÁST 2 Vytváření dokumentů XML 65

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Jazyk C++ I. Šablony

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

1. Webové služby. K čemu slouží? 2. RPC Web Service. 3. SOA Web Service. 4. RESTful Web services

Algoritmizace a programování

Teoretické minimum z PJV

Specifikace služby IS CEDR pro zpracování hromadného dotazu na výsledky kontrol

typová konverze typová inference

Komentář k datovému standardu a automatizovaným kontrolám obsahu F_ODP_PROD verze / 12

NDIC - DATEX II Elaborated Data Publication - Hustota provozu

XML Schema a jeho implementace v prostředí

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Koordinační středisko pro resortní zdravotnické informační systémy

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Komentář k datovému standardu a automatizovaným kontrolám obsahu F_ODP_PROD verze / 17

ZÁPADOČESKÁ UNIVERZITA V PLZNI

Diplomová práce Generátor XML souborů řízený XSD schématem

Standardy publikace a katalogizace otevřených dat. Dušan Chlapek David Hemala

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

CineStar Černý Most Praha

Komentář k datovému standardu a automatizovaným kontrolám obsahu F_ODP_PROD verze / 17

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

java remote method invocation Kateřina Fricková, Matouš Jandek

Softwarové komponenty a Internet

Funkční specifikace ABOKWS. Aplikační rozhraní elektronického bankovnictví ABO-K. Verze 0.5

Vytváření a použití knihoven tříd

Transkript:

Vánoční hrátky s JAXB http://jaxb.dev.java.net Martin Grebáč, martin.grebac@sun.com Pavel Bucek, pavel.bucek@sun.com 1

Přehled Příklad 1 - Jednoduché čtení/zapisování z/do XML Co je JAXB > O projektu > Framework Příklad 2 - XML schéma, generování Java kódu, Validace Možnosti rozšíření Použití Kde, co a jak Otázky 2

DEMO1 Rychle, jak můžu psát a číst tohle XML? Jak co nejrychleji začít s JAXB public class Gift { public enum Color {... } public String recipient; public int size; public Color color; } public Gift(recipient, size, color) { } 3

JAXB Historie JAXB 1 > mapování dat pro framework webových služeb JAX-RPC > součástí Java EE 1.4 JAXB 2.0 - Velký třesk > Samostatný standard JSR 222 (http://www.jcp.org) > Velké změny architektury a vylepšení (anotace, mnohem méně generovaného kódu, vyšší výkon) > Mapování dat pro api pro webové služby JAX-WS 2.0 > Integrace do Javy přímá součást JDK 6 JAXB 2.1 > JDK 1.6 update 4, JAX-WS 2.1 4

JAXB Současnost JAXB 2.2 > 10.12.2009 > Plánovaná integrace do JDK 7 > Součástí Java EE 6 GlassFish V3 referenční implementace > JAX-WS 2.2 integrace 5

JAXB O Projektu Spec lead: Kohsuke Kawaguchi Tech lead: Martin Grebáč Developer: Pavel Bucek TCK, JCK: Leonid Kuskov Licencee engineer: David Korbel Everything else (QE/RE/Docs/Webadmin): Martin/Pavel 6

DEMO 2 co s tímhle.xsd souborem? Jak používat JAXB s XSD schématem <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://xml.netbeans.org/schema/czjug02" xmlns:tns="http://xml.netbeans.org/schema/czjug02" elementformdefault="qualified"> </xsd:schema> <xsd:element name="christmastree"><xsd:complextype><xsd:sequence> <xsd:element name="gift" minoccurs="0" maxoccurs="20"> <xsd:complextype> <xsd:sequence> <xsd:element name="recipient" type="xsd:string" /> <xsd:element name="size" type="xsd:int" /> <xsd:element name="color" type="tns:color" /> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence></xsd:complextype></xsd:element> <xsd:simpletype name="color"><xsd:restriction base = "xsd:string"> <xsd:enumeration value = "RED" />... </xsd:restriction></xsd:simpletype> 7

DEMO 2 ještě jednou, jak? > xjc christmas.xsd (vygeneruje ChristmasTree.java,...) JAXBContext ctx = JAXBContext.newInstance( package ); Zápis do XML ChristmasTree mytree = new ChristmasTree(); mytree.set...; Marshaller m = ctx.createmarshaller(); m.marshal(mytree, f); Čtení z XML Unmarshaller u = ctx.createunmarshaller(); ChristmasTree mytree = (ChristmasTree) u.unmarshal(is); 8

JAXB Úpravy, nastavení a rozšíření Vnořené / Externí reference <xs:annotation> > xjc -b bindingfile schema <xs:appinfo>... binding declarations... </xs:appinfo> </xs:annotation> Globální / Lokální <jaxb:property /> <jxb:class /> <jxb:schemabindings /> <jxb:globalbindings /> 9

Globální úpravy <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.0"> <xsd:annotation> <xsd:appinfo> <jxb:globalbindings collectiontype="java.util.vector choicecontentproperty = boolean enablefailfastcheck = boolean enablejavanamingconventions = boolean enablevalidation = boolean fixedattributeasconstantproperty = boolean generateelementclass = boolean generateelementproperty = boolean generatevalueclass = boolean localscoping = "nested" "toplevel" mapsimpletypedef = boolean optionalproperty = "wrapper" "primitive" "isset" underscorebinding = "aswordseparator" "ascharinword" /> </xsd:appinfo> </xsd:annotation> 10

Globální úpravy xjc:simple (proprietary) Přesnější generování typů @XmlRootElement Generování (anglických) plurálů Cíl: ještě větší zjednodušení práce s JAXB Experimentální, proprietární 11

Globální úpravy xjc:simple (experimental) <xs:schema xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" // bez xjc:simple jaxb:extensionbindingprefixes="xjc"> <xs:annotation> <xs:appinfo> <jaxb:globalbindings generatevalueclass="false"> public class Person { protected List<String> child; <xjc:simple /> </jaxb:globalbindings> </xs:appinfo> </xs:annotation> <xs:complextype name="person"> <xs:choice> } protected List<String> parent; List<JAXBElement<Integer>> content; <xs:sequence> <xs:element name="a" type="xs:int" /> <xs:element name="b" type="xs:int" /> </xs:sequence> <xs:sequence> // s <xjc:simple> nastavením @XmlRootElement public class Person { <xs:element name="b" type="xs:int" /> <xs:element name="c" type="xs:int" /> </xs:sequence> </xs:choice> <xs:sequence> <xs:element name="child" type="xs:string maxoccurs="unbounded"/> <xs:element name="parent" type="xs:string" maxoccurs="unbounded" /> </xs:sequence> } protected List<String> children; protected List<String> parents; Integer a; int b; Integer c; </xs:complextype><xs:schema> 12

Lokální úpravy <xsd:complextype name="christmasgiftstype"> <xsd:annotation> <xsd:appinfo> <jxb:class name="gifttype"> <jxb:javadoc> A <b>gift</b> consists of addresses and items. </jxb:javadoc> </jxb:class> </xsd:appinfo> </xsd:annotation>... /** * A <b>gift</b> consists of addresses * and items. **/ @XmlType(name= ChristmasGiftsType ) public class GiftType { } 13

Rozšíření - XJC pluginy https://jaxb2-commons.dev.java.net/ Návod k použití: > Stáhnout jar pluginu > Spustit xjc s jarem pluginu na classpath a identifikátorem (názvem) pluginu > xjc -classpath plugin.jar -Xplugin... 14

Rozšíření - XJC pluginy Basic Set https://jaxb2-commons.dev.java.net/ 15

Rozšíření - XJC pluginy Fluent API https://jaxb2-commons.dev.java.net/ 16

Rozšíření - XJC pluginy Annotations https://jaxb2-commons.dev.java.net/ 17

JAXB Pro / proti JAXB Pro > Zjednodušení vývoje aplikací s XML, zjednodušení a zdrojového kódu > Pokud požadujete výkon a efektivní správu paměti > Podpora streamování > 100% podpora XSD formátu > Váš framework již JAXB používá (Jersey, JAX-WS, Metro) > Přímo součást JDK podpora, standard, testy > Spolehlivost a kvalita Běžíme pravidelně několik desítek tisíc testů Další velké sady testů běží na všech platformách podporovaných Javou při integracích do JDK / JAX-WS / Metra / Jersey 18

JAXB Pro / proti JAXB Kdy zvážit alternativy > JDK < 1.5 > Nepřiliš striktně definovaná schémata xs:any, xs:schema, mixed elementy, abstraktní typy a xsi definice, nillable elementy > Kontrola nad přesným zápisem XML dokumentace, odsazování, zachování formátování,... > Když standardní Java / XML mapování nevyhovuje > Pokud kladete kritický důraz na čas strávený inicializací Vytvoření instance JAXBContext je operace drahá na čas i paměť JAXB hledá beany a vnáší do nich dynamicky metody nutné k přístupu k elementům 19

JAXB Co jsme nestihli ukázat... ale najdete to v dokumentaci nebo vzorových příkladech Java Schéma přístup Částečný unmarshalling (Binder) Dynamické mapování XML elementů Jak řešit cyklické reference Typová substituce v XML/XSD, abstraktní typy Adaptéry (vlastní metody na zápis/čtení typů) Jak na kolize, katalogy, escaping znaků, DTD, JSON,... mnoho dalších věcí... 20

Otázky? 21

https://jaxb.dev.java.net https://jaxb2-commons.dev.java.net/ users@jaxb.dev.java.net http://www.jcp.org/en/jsr/summary?id=222 22

JAXB Pojmy JAXBContext Marshaller/Marshalling Unmarshaller/Unmarshalling XJC Binding soubor XSD RelaxNG Validace 23

JAXB Architektura 24