ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ...
-
Upload
fletcher-jenkins -
Category
Documents
-
view
57 -
download
0
description
Transcript of ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ...
![Page 1: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/1.jpg)
ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/2.jpg)
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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/3.jpg)
Архитектура Архитектура JAXBJAXBАрхитектура Архитектура JAXBJAXB
![Page 4: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/4.jpg)
Пример: Пример: 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/5.jpg)
Пример: Пример: 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/6.jpg)
Пример: Генерация Пример: Генерация 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/7.jpg)
Пример: сгенерированные Пример: сгенерированные 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/8.jpg)
Пример: работа с Пример: работа с 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/9.jpg)
Пример: работа с Пример: работа с 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/10.jpg)
Пакет СвязыванияПакет Связывания
Binding FrameworkBinding Framework
![Page 11: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/11.jpg)
Пакет СвязыванияПакет СвязыванияПакет СвязыванияПакет Связывания
Основные операции:Основные операции: маршаллинг (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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/12.jpg)
Проверка Проверка 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/13.jpg)
ДемаршаллингДемаршаллингДемаршаллингДемаршаллинг
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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/14.jpg)
МаршаллингМаршаллингМаршаллингМаршаллинг
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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/15.jpg)
Связывание Связывание XMLXML схемы схемы и и JavaJava Представления Представления
Binding XML Schema to Java ClassesBinding XML Schema to Java Classes
![Page 16: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/16.jpg)
Связывание имен: Связывание имен: 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/17.jpg)
Связывание составных типов данных Связывание составных типов данных Связывание составных типов данных Связывание составных типов данных
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/18.jpg)
Свойства (Свойства (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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/19.jpg)
Перечисление (Перечисление (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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/20.jpg)
Связывание встроенных типов данныхСвязывание встроенных типов данныхСвязывание встроенных типов данныхСвязывание встроенных типов данных
Таблица соответствия встроенных типовТаблица соответствия встроенных типов
(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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/21.jpg)
НаследованиеНаследованиеНаследованиеНаследование
Наследование Наследование 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/22.jpg)
НаследованиеНаследованиеНаследованиеНаследование
Наследование Наследование 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/23.jpg)
Переопределение СвязыванияПереопределение СвязыванияCustomizing JAXB BindingsCustomizing JAXB Bindings
![Page 24: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/24.jpg)
Зачем Переопределять?Зачем Переопределять?Зачем Переопределять?Зачем Переопределять?
Стандартное связывания (Стандартное связывания (Default BindingDefault Binding))
Переопределение связыванияПереопределение связывания:: создание документации (создание документации (JavadocJavadoc)) изменение правил именованияизменение правил именования
разрешить конфликтов именразрешить конфликтов имен определить имена для констант перечисленийопределить имена для констант перечислений
определять свои типы данных для атрибутовопределять свои типы данных для атрибутов переопределять связывание встроенных типовпереопределять связывание встроенных типов переопределять маршаллинг переопределять маршаллинг // демаршаллинг для демаршаллинг для
пользовательских типов данныхпользовательских типов данных
![Page 25: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/25.jpg)
Встроенное и Внешнее ПереопределениеВстроенное и Внешнее ПереопределениеВстроенное и Внешнее ПереопределениеВстроенное и Внешнее Переопределение
Встроенное переопределение – внутри Встроенное переопределение – внутри 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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/26.jpg)
Использование Внешнего ПереопределенияИспользование Внешнего ПереопределенияИспользование Внешнего ПереопределенияИспользование Внешнего Переопределения
Командная строкаКомандная строка
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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/27.jpg)
Глобальные ПереопределенияГлобальные ПереопределенияГлобальные ПереопределенияГлобальные Переопределения
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/28.jpg)
Переопределения Уровня СхемыПереопределения Уровня СхемыПереопределения Уровня СхемыПереопределения Уровня Схемы
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/29.jpg)
Переопределения Типов Данных и КомпонентПереопределения Типов Данных и КомпонентПереопределения Типов Данных и КомпонентПереопределения Типов Данных и Компонент
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/30.jpg)
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/31.jpg)
Пример Настройки СвязыванияПример Настройки СвязыванияПример Настройки СвязыванияПример Настройки Связывания
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/32.jpg)
Пример Настройки СвязыванияПример Настройки СвязыванияПример Настройки СвязыванияПример Настройки Связывания
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/33.jpg)
Пример: Разрешение Конфликтов ИменПример: Разрешение Конфликтов ИменПример: Разрешение Конфликтов ИменПример: Разрешение Конфликтов Имен
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/34.jpg)
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/35.jpg)
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/36.jpg)
Пример: ПеречислениеПример: ПеречислениеПример: ПеречислениеПример: Перечисление
<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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/37.jpg)
JAXB vs. JAXPJAXB vs. JAXPJAXB vs. JAXPJAXB vs. JAXP
JAXB JAXB следует использовать когда нужно:следует использовать когда нужно: Создавать объектные представления данных XMLСоздавать объектные представления данных XML Обрабатывать только верные данные Обрабатывать только верные данные Преобразовывать данные к различным типам Преобразовывать данные к различным типам
JAXJAXPP следует использовать когда нужно: следует использовать когда нужно: Обрабатывать документы, построенные на различных DTDОбрабатывать документы, построенные на различных DTD Обрабатывать документы, которые не обязательно являются Обрабатывать документы, которые не обязательно являются
правильными правильными Применять XSLT преобразования Применять XSLT преобразования Обрабатывать лишь отдельные части Обрабатывать лишь отдельные части XML XML документадокумента
![Page 38: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/38.jpg)
Использование Использование JAXBJAXBИспользование Использование JAXBJAXB
Система Электронного Документооборота Система Электронного Документооборота ((EDHEDH))
Приложение электронной коммерции Приложение электронной коммерции B2B:B2B: стандарт стандарт cXMLcXML ~~ 100 интерфейсов объектной модели 100 интерфейсов объектной модели ~~ 100 классов реализации 100 классов реализации
![Page 39: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/39.jpg)
Спасибо за внимание!Спасибо за внимание!Спасибо за внимание!Спасибо за внимание!
![Page 40: ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/40.jpg)
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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/41.jpg)
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 ПРИЛОЖЕНИЙ](https://reader036.fdocument.pub/reader036/viewer/2022081420/56812c23550346895d908af9/html5/thumbnails/42.jpg)
Уровни Действия ПереопределенияУровни Действия ПереопределенияУровни Действия ПереопределенияУровни Действия Переопределения
Каждый следующий уровень по отношению к предыдущему:Каждый следующий уровень по отношению к предыдущему: наследует наследует переопределяетпереопределяет
Глобальные ПереопределенияГлобальные Переопределения
СхемаСхема
Тип ДанныхТип Данных
КомпонентКомпонент