ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ jaxb ПРИ РАЗРАБОТКЕ xml...

42
ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB JAXB ПРИ РАЗРАБОТКЕ ПРИ РАЗРАБОТКЕ XML XML ПРИЛОЖЕНИЙ ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business Section Afonin Alexey, Derek Mathieson Afonin Alexey, Derek Mathieson e-Business section, e-Business section, IT department IT department CERN – Geneva, Switzerland CERN – Geneva, Switzerland

Upload: alan-hicks

Post on 17-Dec-2015

245 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXBJAXBПРИ РАЗРАБОТКЕ ПРИ РАЗРАБОТКЕ XMLXML ПРИЛОЖЕНИЙ ПРИЛОЖЕНИЙ

ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXBJAXBПРИ РАЗРАБОТКЕ ПРИ РАЗРАБОТКЕ XMLXML ПРИЛОЖЕНИЙ ПРИЛОЖЕНИЙ

CERN – European Organization for Nuclear Research

IT Department – e-Business Section

Afonin Alexey, Derek MathiesonAfonin Alexey, Derek Mathiesone-Business section,e-Business section, IT departmentIT department

CERN – Geneva, SwitzerlandCERN – Geneva, Switzerland

Page 2: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

JAXBJAXBJAXBJAXB

JAXB:JAXB: The Java Architecture for XML BindingThe Java Architecture for XML Binding Спецификация принята 8 Января 2003 годаСпецификация принята 8 Января 2003 года

http://java.sun.com/xml/downloads/jaxb.htmlhttp://java.sun.com/xml/downloads/jaxb.html

Доступные реализации:Доступные реализации: SUN, является частью Java Web Services Developer Pack SUN, является частью Java Web Services Developer Pack

http://java.sun.com/xml/downloads/jaxb.htmlhttp://java.sun.com/xml/downloads/jaxb.html Apache JAXMEApache JAXME

http://ws.apache.org/jaxme/http://ws.apache.org/jaxme/

Page 3: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Архитектура Архитектура JAXBJAXBАрхитектура Архитектура JAXBJAXB

Page 4: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: Пример: XMLXMLПример: Пример: XMLXML

<orders-list><orders-list>

<order><order><number>1001</number><number>1001</number><date>2005-01-01</date><date>2005-01-01</date><description>First Order</description><description>First Order</description><amount>10</amount><amount>10</amount>

</order></order>

<order><order><number>1002</number><number>1002</number><date>2005-01-02</date><date>2005-01-02</date><description>Second Order</description><description>Second Order</description><amount>20.2</amount><amount>20.2</amount>

</order></order>

</orders-list></orders-list>

Page 5: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: Пример: XML SchemaXML SchemaПример: Пример: XML SchemaXML Schema

<xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsd:element name="orders-list"><xsd:element name="orders-list"> <xsd:complexType><xsd:complexType> <xsd:sequence><xsd:sequence> <xsd:element ref="<xsd:element ref="orderorder" maxOccurs="unbounded"/>" maxOccurs="unbounded"/> </xsd:sequence></xsd:sequence> </xsd:complexType></xsd:complexType> </xsd:element></xsd:element> <xsd:element name="order"><xsd:element name="order"> <xsd:complexType><xsd:complexType> <xsd:sequence><xsd:sequence> <xsd:element name="<xsd:element name="numbernumber" type="xsd:long"/>" type="xsd:long"/> <xsd:element name="<xsd:element name="datedate" type="xsd:date"/>" type="xsd:date"/> <xsd:element name="<xsd:element name="descriptiondescription" type="xsd:string"/>" type="xsd:string"/> <xsd:element name="<xsd:element name="amountamount" type="xsd:" type="xsd:doubledouble"/>"/> </xsd:sequence></xsd:sequence> </xsd:complexType></xsd:complexType> </xsd:element></xsd:element></xsd:schema></xsd:schema>

Page 6: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: Генерация Пример: Генерация JavaJava классов классовПример: Генерация Пример: Генерация JavaJava классов классов

Из командной стрИз командной стрококи:и:

%jwsdp.home%\jaxb\bin\xjc.bat %jwsdp.home%\jaxb\bin\xjc.bat

-p generated -d src simple-order.xsd -p generated -d src simple-order.xsd

Из скриптаИз скрипта Ant: Ant:

<project basedir="." default="generate"><project basedir="." default="generate">

<<taskdeftaskdef name=" name="xjcxjc" classname="com.sun.tools.xjc.XJCTask“" classname="com.sun.tools.xjc.XJCTask“

classpathref="classpath“>classpathref="classpath“>

<target name="generate"><target name="generate">

<<xjcxjc schemaschema="simple-order.xsd" ="simple-order.xsd"

targettarget="src" ="src"

packagepackage="generated"/>="generated"/>

</target></target>

</project></project>

Page 7: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: сгенерированные Пример: сгенерированные JavaJava классы классыПример: сгенерированные Пример: сгенерированные JavaJava классы классы

OrdersListType.javaOrdersListType.javapublic interface OrdersListType {public interface OrdersListType {

java.util.List java.util.List getOrdergetOrder();();}}

OrderType.javaOrderType.javapublic interface OrderType {public interface OrderType {

doubledouble getAmountgetAmount();(); void void setAmountsetAmount((doubledouble value); value);

java.lang.String java.lang.String getDescriptiongetDescription();(); void void setDescriptionsetDescription(java.lang.String value);(java.lang.String value);

java.util.Calendar java.util.Calendar getDategetDate();(); void void setDatesetDate(java.util.Calendar value);(java.util.Calendar value);

long long getNumbergetNumber();(); void void setNumbersetNumber(long value);(long value);}}

Page 8: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: работа с Пример: работа с JAXBJAXBПример: работа с Пример: работа с JAXBJAXB

JAXBContext JAXBContext jaxbCtxjaxbCtx = JAXBContext.newInstance(" = JAXBContext.newInstance("generatedgenerated");");

Unmarshaller Unmarshaller unmarshallerunmarshaller = = jaxbCtxjaxbCtx.createUnmarshaller();.createUnmarshaller();

OrdersListType orders OrdersListType orders = (OrdersListType)= (OrdersListType)unmarshaller.unmarshalunmarshaller.unmarshal(( new File("new File("simple-order.xmlsimple-order.xml"));"));

List ordersList = orders.getOrder();List ordersList = orders.getOrder();for (int i = 0; i < ordersList.size(); i++) {for (int i = 0; i < ordersList.size(); i++) {

OrderTypeOrderType order = (OrderType)ordersList.get(i); order = (OrderType)ordersList.get(i);System.out.println("Number = " + System.out.println("Number = " + order.getNumber()order.getNumber()

+ ", amount = " + + ", amount = " + order.getAmount()order.getAmount()););}}......

Чтение из Чтение из XMLXML файла файла

Page 9: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: работа с Пример: работа с JAXBJAXBПример: работа с Пример: работа с JAXBJAXB

......ObjectFactory ObjectFactory objectFactoryobjectFactory = new ObjectFactory(); = new ObjectFactory();

Order Order newOrdernewOrder = = objectFactory.createOrder();objectFactory.createOrder();newOrder.setNumber(2006);newOrder.setNumber(2006);newOrder.setDate(Calendar.getInstance());newOrder.setDate(Calendar.getInstance());newOrder.setDescription("New Order");newOrder.setDescription("New Order");newOrder.setAmount(100);newOrder.setAmount(100);

orders.getOrder().add(newOrder);orders.getOrder().add(newOrder);

Marshaller Marshaller marshallermarshaller = = jaxbCtx jaxbCtx.createMarshaller();.createMarshaller();marshaller.marshal(marshaller.marshal(ordersorders, , new FileOutputStream(new File("simple-order.xml")));new FileOutputStream(new File("simple-order.xml")));

Изменение Изменение XMLXML файла файла

Page 10: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пакет СвязыванияПакет Связывания

Binding FrameworkBinding Framework

Page 11: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пакет СвязыванияПакет СвязыванияПакет СвязыванияПакет Связывания

Основные операции:Основные операции: маршаллинг (marshalling)маршаллинг (marshalling) демаршаллинг (unmarshalling)демаршаллинг (unmarshalling) проверкапроверка (validation) (validation)

Класс Класс javax.xml.bind.JAXBContextjavax.xml.bind.JAXBContext - "точка входа" в JAXB API - "точка входа" в JAXB API

public abstract class public abstract class JAXBContextJAXBContext { { static JAXBContext static JAXBContext newInstancenewInstance(String contextPath)(String contextPath) static JAXBContext static JAXBContext newInstancenewInstance(String contextPath,(String contextPath, ClassLoader contextPathCL)ClassLoader contextPathCL) abstract abstract UnmarshallerUnmarshaller createUnmarshaller(); createUnmarshaller(); abstract abstract MarshallerMarshaller createMarshaller(); createMarshaller(); abstract abstract ValidatorValidator createValidator(); createValidator();}}

Page 12: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Проверка Проверка XMLXML документа документаПроверка Проверка XMLXML документа документа

JAXB предоставляет три варианта проверки XML документа:JAXB предоставляет три варианта проверки XML документа: во время демаршаллинга (unmarshall-time validation)во время демаршаллинга (unmarshall-time validation) по требованию (on-demand validation)по требованию (on-demand validation) "на лету" (fail-fast validation)"на лету" (fail-fast validation)

public interface public interface ValidatorValidator { { ValidationEventHandler getEventHandler()ValidationEventHandler getEventHandler() void setEventHandler(ValidationEventHandlervoid setEventHandler(ValidationEventHandler handlerhandler))

boolean boolean validatevalidate(java.lang.Object subrootObject)(java.lang.Object subrootObject) boolean boolean validateRootvalidateRoot(java.lang.Object rootObject)(java.lang.Object rootObject)}}

ValidatorValidator позволяет проверять объектное представление документапозволяет проверять объектное представление документа

Page 13: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

ДемаршаллингДемаршаллингДемаршаллингДемаршаллинг

public interface public interface UnmarshallerUnmarshaller { {

boolean boolean isValidatingisValidating() throws JAXBException;() throws JAXBException; void void setValidatingsetValidating(boolean b) throws JAXBException;(boolean b) throws JAXBException;

ValidationEventHandler ValidationEventHandler getEventHandlergetEventHandler() () throws JAXBException;throws JAXBException; void void setEventHandlersetEventHandler(ValidationEventHandler handler)(ValidationEventHandler handler) throws JAXBException;throws JAXBException;

Object unmarshal(Object unmarshal(FileFile file) throws JAXBException; file) throws JAXBException; Object unmarshal(Object unmarshal(InputStreamInputStream isis)) throws JAXBException;throws JAXBException; Object unmarshal(Object unmarshal(URLURL url) throws JAXBException; url) throws JAXBException; Object unmarshal(Object unmarshal(SourceSource source) throws JAXBException; source) throws JAXBException; Object unmarshal(Object unmarshal(NodeNode node) throws JAXBException; node) throws JAXBException; Object unmarshal(Object unmarshal(InputSourceInputSource isis) throws JAXBException;) throws JAXBException;}}

Unmarshaller Unmarshaller читает XML документ, выполняет его проверку и строит читает XML документ, выполняет его проверку и строит объектную модельобъектную модель

Page 14: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

МаршаллингМаршаллингМаршаллингМаршаллинг

MMarshaller arshaller сохраняет объектную модель в сохраняет объектную модель в XML документXML документ

public interface public interface MarshallerMarshaller { {

ValidationEventHandler ValidationEventHandler getEventHandlergetEventHandler() throws JAXBException;() throws JAXBException; void void setEventHandlersetEventHandler(ValidationEventHandler (ValidationEventHandler hhandler) andler) throws JAXBException;throws JAXBException;

void marshal(Object o, void marshal(Object o, OutputStreamOutputStream osos) throws JAXBException;) throws JAXBException; void marshal(Object o, void marshal(Object o, WriterWriter writer) throws JAXBException; writer) throws JAXBException; void marshal(Object o, void marshal(Object o, ResultResult result) throws JAXBException; result) throws JAXBException; void marshal(Object o, void marshal(Object o, NodeNode node) throws JAXBException; node) throws JAXBException; void marshal(Object o, void marshal(Object o, ContentHandlerContentHandler chch) throws JAXBException;) throws JAXBException; Node Node getNodegetNode(Object o) (Object o) throwsthrows JAXBException; JAXBException;

Object Object getPropertygetProperty(String s) throws PropertyException;(String s) throws PropertyException; void void setPropertysetProperty(String s, Object o) throws PropertyException; (String s, Object o) throws PropertyException;

String String JAXB_ENCODINGJAXB_ENCODING = "jaxb.encoding"; = "jaxb.encoding"; String String JAXB_FORMATTED_OUTPUTJAXB_FORMATTED_OUTPUT = "jaxb.formatted.output"; = "jaxb.formatted.output";}}

Page 15: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Связывание Связывание XMLXML схемы схемы и и JavaJava Представления Представления

Binding XML Schema to Java ClassesBinding XML Schema to Java Classes

Page 16: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Связывание имен: Связывание имен: XML XML Java JavaСвязывание имен: Связывание имен: XML XML Java Java

XML Имя Имя Класса Имя Метода Имя Константы

mixedCaseName MixedCaseName getMixedCaseName MIXED_CASE_NAME

Answer42 Answer42 getAnswer42 ANSWER_42

name-with-dashes NameWithDashes getNameWithDashes NAME_WITH_DASHES

other_punct-chars OtherPunctChars getOtherPunctChars OTHER_PUNCT_CHARS

Page 17: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Связывание составных типов данных Связывание составных типов данных Связывание составных типов данных Связывание составных типов данных

<xsd:complexType name="<xsd:complexType name="personpersonTypeType">">

<xsd:sequence><xsd:sequence>

<xsd:element name="<xsd:element name="namename" type="xsd:string"/>" type="xsd:string"/>

<xsd:element name="<xsd:element name="departmentIddepartmentId" type="xsd:long"/>" type="xsd:long"/>

</xsd:sequence></xsd:sequence>

<xsd:attribute name="<xsd:attribute name="idid" type="xsd:long"/>" type="xsd:long"/>

</xsd:complexType></xsd:complexType>

Составной тип Составной тип XMLXML схемы схемы Java Java интерфейсинтерфейс

public interface public interface PersonPersonTypeType

{{

long getlong getDepartmentIdDepartmentId();();

void setvoid setDepartmentIdDepartmentId(long value);(long value);

java.lang.String getjava.lang.String getNameName();();

void setvoid setNameName(java.lang.String value);(java.lang.String value);

long getlong getIdId();();

void setvoid setIdId(long value);(long value);

}}

Page 18: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Свойства (Свойства (Properties)Properties)Свойства (Свойства (Properties)Properties)

Простое свойство (Simple Property)Простое свойство (Simple Property)

Вложенные компоненты Вложенные компоненты XMLXML схемы схемы Java Java свойства свойства

<xsd:element name="<xsd:element name="namename" type="xsd:string"/>" type="xsd:string"/>

java.lang.String getjava.lang.String getNameName();();

void setvoid setNameName(java.lang.String value);(java.lang.String value);

Группа свойств (Collection Property)Группа свойств (Collection Property)

<xsd:element name="item" type="xsd:string"<xsd:element name="item" type="xsd:string" maxOccurs="unbounded"/>maxOccurs="unbounded"/>

java.util.List getItem();java.util.List getItem();

Page 19: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Перечисление (Перечисление (Type Safe EnumerationType Safe Enumeration))Перечисление (Перечисление (Type Safe EnumerationType Safe Enumeration))

<xsd:simpleType name="<xsd:simpleType name="countryTypecountryType">">

<xsd:restriction base="xsd:NCName"><xsd:restriction base="xsd:NCName">

<<xsd:enumerationxsd:enumeration value=" value="FRANCEFRANCE"/>"/>

<<xsd:enumerationxsd:enumeration value=" value="SWITZERLANDSWITZERLAND"/>"/>

</xsd:restriction></xsd:restriction>

</xsd:simpleType></xsd:simpleType>

Производный атомарный тип данных с ограничением типа Производный атомарный тип данных с ограничением типа «перечисление»«перечисление» Перечисление (Перечисление (Type Safe Enumeration)Type Safe Enumeration)

public class public class CountryTypeCountryType { {

private final String value;private final String value;

protected CountryType(String v) { value = v; }protected CountryType(String v) { value = v; }

public final static CountryType public final static CountryType FRANCEFRANCE

= new CountryType(= new CountryType(""FRANCEFRANCE""););

public final static CountryType public final static CountryType SWITZERLANDSWITZERLAND

= new generated.CountryType(= new generated.CountryType(""SWITZERLANDSWITZERLAND""););

......

}}

Page 20: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Связывание встроенных типов данныхСвязывание встроенных типов данныхСвязывание встроенных типов данныхСвязывание встроенных типов данных

Таблица соответствия встроенных типовТаблица соответствия встроенных типов

(Simple Built-in Types)(Simple Built-in Types)

Тип данных Тип данных XML XML схемысхемы Тип данных Тип данных JavaJava

xsd:string java.lang.String

xsd:integer java.math.BigInteger

xsd:int int

xsd:long long

xsd:decimal java.math.BigDecimal

xsd:float float

xsd:double double

xsd:boolean boolean

xsd:byte byte

xsd:dateTime java.util.Calendar

xsd:anySimpleType java.lang.String

Page 21: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

НаследованиеНаследованиеНаследованиеНаследование

Наследование Наследование XMLXML типов через ограничение ( типов через ограничение (restrictionrestriction) или ) или расширениерасширение (extension) (extension) Java Java наследованиенаследование

<xsd:complexType name="<xsd:complexType name="AddressAddress">">

<xsd:sequence><xsd:sequence>

<xsd:element name="<xsd:element name="namename" type="xsd:string"/>" type="xsd:string"/>

<xsd:element name="<xsd:element name="streetstreet" type="xsd:string"/>" type="xsd:string"/>

<xsd:element name="<xsd:element name="citycity" type="xsd:string"/>" type="xsd:string"/>

</xsd:sequence></xsd:sequence>

</xsd:complexType></xsd:complexType>

<xsd:complexType name="<xsd:complexType name="USAddressUSAddress">">

<xsd:complexContent><xsd:complexContent>

<xsd:extension base="Address"><xsd:extension base="Address">

<xsd:sequence><xsd:sequence>

<xsd:element name="<xsd:element name="statestate" type="xsd:string"/>" type="xsd:string"/>

<xsd:element name="<xsd:element name="zipzip" type="xsd:integer"/>" type="xsd:integer"/>

</xsd:sequence></xsd:sequence>

</xsd:extension></xsd:extension>

</xsd:complexContent></xsd:complexContent>

</xsd:complexType></xsd:complexType>

Page 22: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

НаследованиеНаследованиеНаследованиеНаследование

Наследование Наследование XMLXML типов через ограничение ( типов через ограничение (restrictionrestriction) или ) или расширениерасширение (extension) (extension) Java Java наследованиенаследование

public interface public interface AddressAddress

{{

java.lang.String getjava.lang.String getCityCity();();

void setvoid setCityCity(java.lang.String value);(java.lang.String value);

java.lang.String getjava.lang.String getStreetStreet();();

void setvoid setStreetStreet(java.lang.String value);(java.lang.String value);

java.lang.String getjava.lang.String getNameName();();

void setvoid setNameName(java.lang.String value);(java.lang.String value);

}}

public interface public interface USAddressUSAddress extendsextends AddressAddress

{{

java.lang.String getjava.lang.String getStateState();();

void setvoid setStateState(java.lang.String value);(java.lang.String value);

long getlong getZipZip();();

void setvoid setZipZip(long value);(long value);

}}

Page 23: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Переопределение СвязыванияПереопределение СвязыванияCustomizing JAXB BindingsCustomizing JAXB Bindings

Page 24: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Зачем Переопределять?Зачем Переопределять?Зачем Переопределять?Зачем Переопределять?

Стандартное связывания (Стандартное связывания (Default BindingDefault Binding))

Переопределение связыванияПереопределение связывания:: создание документации (создание документации (JavadocJavadoc)) изменение правил именованияизменение правил именования

разрешить конфликтов именразрешить конфликтов имен определить имена для констант перечисленийопределить имена для констант перечислений

определять свои типы данных для атрибутовопределять свои типы данных для атрибутов переопределять связывание встроенных типовпереопределять связывание встроенных типов переопределять маршаллинг переопределять маршаллинг // демаршаллинг для демаршаллинг для

пользовательских типов данныхпользовательских типов данных

Page 25: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Встроенное и Внешнее ПереопределениеВстроенное и Внешнее ПереопределениеВстроенное и Внешнее ПереопределениеВстроенное и Внешнее Переопределение

Встроенное переопределение – внутри Встроенное переопределение – внутри XMLXML схемы схемы

Внешнее переопределение – отдельный файлВнешнее переопределение – отдельный файл

<xs:annotation><xs:annotation>

<xs:appinfo><xs:appinfo>

<!-- binding declarations --><!-- binding declarations -->

</xs:appinfo></xs:appinfo>

</xs:annotation> </xs:annotation>

<jxb:bindings schemaLocation = "xs:anyURI"><jxb:bindings schemaLocation = "xs:anyURI">

<jxb:bindings node = "xs:string">*<jxb:bindings node = "xs:string">*

<!-- binding declarations --><!-- binding declarations -->

<jxb:bindings><jxb:bindings>

</jxb:bindings> </jxb:bindings>

Page 26: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Использование Внешнего ПереопределенияИспользование Внешнего ПереопределенияИспользование Внешнего ПереопределенияИспользование Внешнего Переопределения

Командная строкаКомандная строка

xjc xjc –b –b <file><file> <schema> <schema>

Скрипт Скрипт AntAnt

<xjc schema="simple-order.xsd" <xjc schema="simple-order.xsd"

target="src"target="src"

binding="cxml-binding.xjb"binding="cxml-binding.xjb"

package="generated"/>package="generated"/>

Page 27: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Глобальные ПереопределенияГлобальные ПереопределенияГлобальные ПереопределенияГлобальные Переопределения

<globalBindings><globalBindings>

[ collectionType = "collectionType" ][ collectionType = "collectionType" ]

[ generateIsSetMethod= "true" | "false" | "1" | "0" ][ generateIsSetMethod= "true" | "false" | "1" | "0" ]

[ enableFailFastCheck = "true" | "false" | "1" | "0" ][ enableFailFastCheck = "true" | "false" | "1" | "0" ]

[ underscoreBinding = "asWordSeparator" | "asCharInWord" ][ underscoreBinding = "asWordSeparator" | "asCharInWord" ]

[ typesafeEnumBase = "typesafeEnumBase" ][ typesafeEnumBase = "typesafeEnumBase" ]

[ <javaType> ... </javaType> ]*[ <javaType> ... </javaType> ]*

</globalBindings></globalBindings>

Page 28: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Переопределения Уровня СхемыПереопределения Уровня СхемыПереопределения Уровня СхемыПереопределения Уровня Схемы

<schemaBindings><schemaBindings>

[ <package> [ <package> package package </package> ]</package> ]

[ <nameXmlTransform> [ <nameXmlTransform> ... ... </nameXmlTransform> ]*</nameXmlTransform> ]*

</schemaBindings></schemaBindings>

<package [ name = "<package [ name = "packageNamepackageName" ]" ]

[ <javadoc> [ <javadoc> ... ... </javadoc> ]</javadoc> ]

</package></package>

<nameXmlTransform><nameXmlTransform>

[ <typeName [ suffix="[ <typeName [ suffix="suffixsuffix" ]" ]

[ prefix="[ prefix="prefixprefix" ] /> ]" ] /> ]

[ <elementName [ suffix="[ <elementName [ suffix="suffixsuffix" ]" ]

[ prefix="[ prefix="prefixprefix" ] /> ]" ] /> ]

</nameXmlTransform></nameXmlTransform>

Page 29: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Переопределения Типов Данных и КомпонентПереопределения Типов Данных и КомпонентПереопределения Типов Данных и КомпонентПереопределения Типов Данных и Компонент

<class [ name = "<class [ name = "classNameclassName"]"] [ implClass= "[ implClass= "implClassimplClass" ] >" ] > [ <javadoc> ... </javadoc> ][ <javadoc> ... </javadoc> ]</class></class>

Связывание КлассовСвязывание Классов

<property[ name = "propertyName"]<property[ name = "propertyName"]

[ collectionType = "propertyCollectionType" ][ collectionType = "propertyCollectionType" ]

[ generateIsSetMethod = "true" | "false" | "1" | "0" ][ generateIsSetMethod = "true" | "false" | "1" | "0" ]

[ enableFailFastCheck ="true" | "false" | "1" | "0" ][ enableFailFastCheck ="true" | "false" | "1" | "0" ]

[ <baseType> ... </baseType> ][ <baseType> ... </baseType> ]

[ <javadoc> ... </javadoc> ][ <javadoc> ... </javadoc> ]

</property></property>

<baseType><baseType>

<javaType> ... </javaType><javaType> ... </javaType>

</baseType></baseType>

Связывание СвойствСвязывание Свойств

Page 30: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

<javaType name= "javaType"<javaType name= "javaType"

[ xmlType= "xmlType" ][ xmlType= "xmlType" ]

[ parseMethod= "parseMethod" ][ parseMethod= "parseMethod" ]

[ printMethod= "printMethod" ][ printMethod= "printMethod" ]//>>

Переопределения Типов Данных и КомпонентПереопределения Типов Данных и КомпонентПереопределения Типов Данных и КомпонентПереопределения Типов Данных и Компонент

Преобразование типов данных Преобразование типов данных Java Java XML XML

Page 31: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример Настройки СвязыванияПример Настройки СвязыванияПример Настройки СвязыванияПример Настройки Связывания

<jxb:bindings <jxb:bindings

xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"

xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:xs="http://www.w3.org/2001/XMLSchema"

version="1.0">version="1.0">

<jxb:bindings <jxb:bindings schemaLocationschemaLocation="="cxml.xsdcxml.xsd"" nodenode="="/xs:schema/xs:schema" >" >

<jxb:schemaBindings><jxb:schemaBindings>

<jxb:<jxb:packagepackage name=" name="cern.edh.cxml.objectscern.edh.cxml.objects"/>"/>

<jxb:nameXmlTransform><jxb:nameXmlTransform>

<jxb:<jxb:typeNametypeName suffix=" suffix="TypeType"/>"/>

</jxb:nameXmlTransform></jxb:nameXmlTransform>

</jxb:schemaBindings></jxb:schemaBindings>

......

Page 32: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример Настройки СвязыванияПример Настройки СвязыванияПример Настройки СвязыванияПример Настройки Связывания

<jxb:bindings node="/xs:schema" schemaLocation="cxml.xsd">

...

<jxb:bindings node="//xs:simpleType[@name='datetime.tz']">

<jxb:javaType name="java.util.Date"

parseMethod="cern.edh.cxml.DateConverter.parseDateTz"

printMethod="cern.edh.cxml.DateConverter.printDateTz"/>

</jxb:bindings>

<jxb:bindings node="//xs:simpleType[@name='deploymentModeValue']">

<jxb:typesafeEnumClass/>

</jxb:bindings>

</jxb:bindings>

</jxb:bindings>

<jxb:bindings node="/xs:schema" schemaLocation="cxml.xsd">

...

<jxb:bindings node="//xs:simpleType[@name='datetime.tz']">

<jxb:javaType name="java.util.Date"

parseMethod="cern.edh.cxml.DateConverter.parseDateTz"

printMethod="cern.edh.cxml.DateConverter.printDateTz"/>

</jxb:bindings>

<jxb:bindings node="//xs:simpleType[@name='deploymentModeValue']">

<jxb:typesafeEnumClass/>

</jxb:bindings>

</jxb:bindings>

</jxb:bindings>

Page 33: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: Разрешение Конфликтов ИменПример: Разрешение Конфликтов ИменПример: Разрешение Конфликтов ИменПример: Разрешение Конфликтов Имен

<jxb:nameXmlTransform>

<jxb:typeName suffix="Type"/>

</jxb:nameXmlTransform>

<jxb:nameXmlTransform>

<jxb:typeName suffix="Type"/>

</jxb:nameXmlTransform>

<xs:element name="Money" type="Money"/>

<xs:complexType name="Money">

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="currency" type="xs:string"/>

<xs:attribute name="alternateAmount" type="xs:double"/>

<xs:attribute name="alternateCurrency" type="xs:string"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

<xs:element name="Money" type="Money"/>

<xs:complexType name="Money">

<xs:simpleContent>

<xs:extension base="xs:string">

<xs:attribute name="currency" type="xs:string"/>

<xs:attribute name="alternateAmount" type="xs:double"/>

<xs:attribute name="alternateCurrency" type="xs:string"/>

</xs:extension>

</xs:simpleContent>

</xs:complexType>

cern.edh.cxml.objects.Money

cern.edh.cxml.objects.MoneyType

cern.edh.cxml.objects.Money

cern.edh.cxml.objects.MoneyType

Page 34: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

<jxb:bindings node="//xs:simpleType[@name='datetime.tz']">

<jxb:javaType name="java.util.Date"

parseMethod="cern.edh.cxml.DateConverter.parseDateTz"

printMethod="cern.edh.cxml.DateConverter.printDateTz"/>

</jxb:bindings>

<jxb:bindings node="//xs:simpleType[@name='datetime.tz']">

<jxb:javaType name="java.util.Date"

parseMethod="cern.edh.cxml.DateConverter.parseDateTz"

printMethod="cern.edh.cxml.DateConverter.printDateTz"/>

</jxb:bindings>

Пример: Преобразование Типов ДанныхПример: Преобразование Типов ДанныхПример: Преобразование Типов ДанныхПример: Преобразование Типов Данных

package cern.edh.cxml;

public class DateConverter

{

public static java.util.Date parseDateTz(String lexicalDate)

throws ParseException {...}

public static String printDateTz(java.util.Date date) {...}

}

package cern.edh.cxml;

public class DateConverter

{

public static java.util.Date parseDateTz(String lexicalDate)

throws ParseException {...}

public static String printDateTz(java.util.Date date) {...}

}

Page 35: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

<xs:simpleType name="datetime.tz">

<xs:restriction base="xs:string"/>

</xs:simpleType>

<xs:element name="cXML">

...

<xs:attribute name="timestamp" type="datetime.tz"/>

<xs:element name="cXML">

<xs:simpleType name="datetime.tz">

<xs:restriction base="xs:string"/>

</xs:simpleType>

<xs:element name="cXML">

...

<xs:attribute name="timestamp" type="datetime.tz"/>

<xs:element name="cXML">

<cXML timestamp="2000-08-03T08:49:09+07:00">

...

</cXML>

<cXML timestamp="2000-08-03T08:49:09+07:00">

...

</cXML>

public interface CXMLType

{ ...

java.util.Date getTimestamp();

void setTimestamp(java.util.Date value);

}

public interface CXMLType

{ ...

java.util.Date getTimestamp();

void setTimestamp(java.util.Date value);

}

Пример: Преобразование Типов ДанныхПример: Преобразование Типов ДанныхПример: Преобразование Типов ДанныхПример: Преобразование Типов Данных

Page 36: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Пример: ПеречислениеПример: ПеречислениеПример: ПеречислениеПример: Перечисление

<jxb:bindings node="//xs:simpleType[@name='deploymentModeValue']">

<jxb:typesafeEnumClass/>

</jxb:bindings>

<jxb:bindings node="//xs:simpleType[@name='deploymentModeValue']">

<jxb:typesafeEnumClass/>

</jxb:bindings>

<xs:simpleType name="deploymentModeValue">

<xs:restriction base="xs:sting">

<xs:enumeration value="production"/>

<xs:enumeration value="test"/>

</xs:restriction>

</xs:simpleType>

<xs:simpleType name="deploymentModeValue">

<xs:restriction base="xs:sting">

<xs:enumeration value="production"/>

<xs:enumeration value="test"/>

</xs:restriction>

</xs:simpleType>

public class DeploymentModeValue {

public final static DeploymentModeValue PRODUCTION

= new DeploymentModeValue(_PRODUCTION);

public final static DeploymentModeValue TEST

= new DeploymentModeValue(_TEST);

...

}

public class DeploymentModeValue {

public final static DeploymentModeValue PRODUCTION

= new DeploymentModeValue(_PRODUCTION);

public final static DeploymentModeValue TEST

= new DeploymentModeValue(_TEST);

...

}

Page 37: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

JAXB vs. JAXPJAXB vs. JAXPJAXB vs. JAXPJAXB vs. JAXP

JAXB JAXB следует использовать когда нужно:следует использовать когда нужно: Создавать объектные представления данных XMLСоздавать объектные представления данных XML Обрабатывать только верные данные Обрабатывать только верные данные Преобразовывать данные к различным типам Преобразовывать данные к различным типам

JAXJAXPP следует использовать когда нужно: следует использовать когда нужно: Обрабатывать документы, построенные на различных DTDОбрабатывать документы, построенные на различных DTD Обрабатывать документы, которые не обязательно являются Обрабатывать документы, которые не обязательно являются

правильными правильными Применять XSLT преобразования Применять XSLT преобразования Обрабатывать лишь отдельные части Обрабатывать лишь отдельные части XML XML документадокумента

Page 38: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Использование Использование JAXBJAXBИспользование Использование JAXBJAXB

Система Электронного Документооборота Система Электронного Документооборота ((EDHEDH))

Приложение электронной коммерции Приложение электронной коммерции B2B:B2B: стандарт стандарт cXMLcXML ~~ 100 интерфейсов объектной модели 100 интерфейсов объектной модели ~~ 100 классов реализации 100 классов реализации

Page 39: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Спасибо за внимание!Спасибо за внимание!Спасибо за внимание!Спасибо за внимание!

Page 40: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

XML XML элементэлементXML XML элементэлемент

XML XML элемент элемент Java Java интерфейс элементаинтерфейс элемента

Тип элемента объявлен составным (Тип элемента объявлен составным (Complex type definitionComplex type definition))::

<xsd:complexType name="<xsd:complexType name="personTypepersonType">">

... ... <!<!--– – вложенные элементы вложенные элементы -->-->

</xsd:complexType></xsd:complexType>

<xsd:element name="<xsd:element name="personperson" type="personType"/>" type="personType"/>

public interface public interface PersonTypePersonType

{ ...{ ... <!<!–– свойства для вложенных элементов свойства для вложенных элементов -->-->

}}

public interface public interface PersonPerson

extends extends javax.xml.bind.Elementjavax.xml.bind.Element, PersonType, PersonType

{{

}}

Page 41: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

XML XML элементэлементXML XML элементэлемент

XML XML элемент элемент Java Java интерфейс элементаинтерфейс элемента

Тип элемента объявлен простым (Тип элемента объявлен простым (Simple type definitionSimple type definition))::

<xsd:element name="<xsd:element name="namename" type="xsd:string"/>" type="xsd:string"/>

public interface public interface NameName

extends extends javax.xml.bind.Elementjavax.xml.bind.Element

{{

java.lang.String getjava.lang.String getValueValue();();

void setvoid setValueValue(java.lang.String value);(java.lang.String value);

}}

Page 42: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business

Уровни Действия ПереопределенияУровни Действия ПереопределенияУровни Действия ПереопределенияУровни Действия Переопределения

Каждый следующий уровень по отношению к предыдущему:Каждый следующий уровень по отношению к предыдущему: наследует наследует переопределяетпереопределяет

Глобальные ПереопределенияГлобальные Переопределения

СхемаСхема

Тип ДанныхТип Данных

КомпонентКомпонент