Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемМарфа Калабухова
1 ИСПОЛЬЗОВАНИЕ ТЕХНОЛОГИИ JAXB ПРИ РАЗРАБОТКЕ XML ПРИЛОЖЕНИЙ CERN – European Organization for Nuclear Research IT Department – e-Business Section Afonin Alexey, Derek Mathieson e-Business section, IT department CERN – Geneva, Switzerland
2 JAXBJAXB JAXB: The Java Architecture for XML Binding The Java Architecture for XML Binding Спецификация принята 8 Января 2003 года Спецификация принята 8 Января 2003 года Доступные реализации: SUN, является частью Java Web Services Developer Pack SUN, является частью Java Web Services Developer Pack Apache JAXME Apache JAXME
3 Архитектура JAXB
4 Пример: XML First Order First Order Second Order Second Order 20.2
5 Пример: XML Schema
6 Пример: Генерация Java классов Из командной строки: %jwsdp.home%\jaxb\bin\xjc.bat -p generated -d src simple-order.xsd -p generated -d src simple-order.xsd Из скрипта Ant:
7 Пример: сгенерированные Java классы OrdersListType.java public interface OrdersListType { java.util.List getOrder(); } OrderType.java public interface OrderType { double getAmount(); double getAmount(); void setAmount(double value); void setAmount(double value); java.lang.String getDescription(); java.lang.String getDescription(); void setDescription(java.lang.String value); void setDescription(java.lang.String value); java.util.Calendar getDate(); java.util.Calendar getDate(); void setDate(java.util.Calendar value); void setDate(java.util.Calendar value); long getNumber(); long getNumber(); void setNumber(long value); void setNumber(long value);}
8 Пример: работа с JAXB JAXBContext jaxbCtx = JAXBContext.newInstance("generated"); Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller(); OrdersListType orders = (OrdersListType)unmarshaller.unmarshal( = (OrdersListType)unmarshaller.unmarshal( new File("simple-order.xml")); new File("simple-order.xml")); List ordersList = orders.getOrder(); for (int i = 0; i < ordersList.size(); i++) { OrderType order = (OrderType)ordersList.get(i); System.out.println("Number = " + order.getNumber() + ", amount = " + order.getAmount()); }... Чтение из XML файла
9 Пример: работа с JAXB... ObjectFactory objectFactory = new ObjectFactory(); Order newOrder = objectFactory.createOrder(); newOrder.setNumber(2006);newOrder.setDate(Calendar.getInstance()); newOrder.setDescription("New Order"); newOrder.setAmount(100);orders.getOrder().add(newOrder); Marshaller marshaller = jaxbCtx.createMarshaller(); marshaller.marshal(orders, new FileOutputStream(new File("simple-order.xml"))); new FileOutputStream(new File("simple-order.xml"))); Изменение XML файла
10 Пакет Связывания Binding Framework
11 Пакет Связывания Основные операции: маршаллинг (marshalling) маршаллинг (marshalling) демаршаллинг (unmarshalling) демаршаллинг (unmarshalling) проверка (validation) проверка (validation) Класс javax.xml.bind.JAXBContext - "точка входа" в JAXB API public abstract class JAXBContext { static JAXBContext newInstance(String contextPath) static JAXBContext newInstance(String contextPath) static JAXBContext newInstance(String contextPath, static JAXBContext newInstance(String contextPath, ClassLoader contextPathCL) ClassLoader contextPathCL) abstract Unmarshaller createUnmarshaller(); abstract Unmarshaller createUnmarshaller(); abstract Marshaller createMarshaller(); abstract Marshaller createMarshaller(); abstract Validator createValidator(); abstract Validator createValidator();}
12 Проверка XML документа JAXB предоставляет три варианта проверки XML документа: во время демаршаллинга (unmarshall-time validation) во время демаршаллинга (unmarshall-time validation) по требованию (on-demand validation) по требованию (on-demand validation) "на лету" (fail-fast validation) "на лету" (fail-fast validation) public interface Validator { ValidationEventHandler getEventHandler() ValidationEventHandler getEventHandler() void setEventHandler(ValidationEventHandler handler) void setEventHandler(ValidationEventHandler handler) boolean validate(java.lang.Object subrootObject) boolean validate(java.lang.Object subrootObject) boolean validateRoot(java.lang.Object rootObject) boolean validateRoot(java.lang.Object rootObject)} Validator позволяет проверять объектное представление документа
13 ДемаршаллингДемаршаллинг public interface Unmarshaller { boolean isValidating() throws JAXBException; boolean isValidating() throws JAXBException; void setValidating(boolean b) throws JAXBException; void setValidating(boolean b) throws JAXBException; ValidationEventHandler getEventHandler() ValidationEventHandler getEventHandler() throws JAXBException; throws JAXBException; void setEventHandler(ValidationEventHandler handler) void setEventHandler(ValidationEventHandler handler) throws JAXBException; throws JAXBException; Object unmarshal(File file) throws JAXBException; Object unmarshal(File file) throws JAXBException; Object unmarshal(InputStream is) throws JAXBException; Object unmarshal(InputStream is) throws JAXBException; Object unmarshal(URL url) throws JAXBException; Object unmarshal(URL url) throws JAXBException; Object unmarshal(Source source) throws JAXBException; Object unmarshal(Source source) throws JAXBException; Object unmarshal(Node node) throws JAXBException; Object unmarshal(Node node) throws JAXBException; Object unmarshal(InputSource is) throws JAXBException; Object unmarshal(InputSource is) throws JAXBException;} Unmarshaller читает XML документ, выполняет его проверку и строит объектную модель
14 МаршаллингМаршаллинг Marshaller сохраняет объектную модель в XML документ public interface Marshaller { ValidationEventHandler getEventHandler() throws JAXBException; ValidationEventHandler getEventHandler() throws JAXBException; void setEventHandler(ValidationEventHandler handler) void setEventHandler(ValidationEventHandler handler) throws JAXBException; throws JAXBException; void marshal(Object o, OutputStream os) throws JAXBException; void marshal(Object o, OutputStream os) throws JAXBException; void marshal(Object o, Writer writer) throws JAXBException; void marshal(Object o, Writer writer) throws JAXBException; void marshal(Object o, Result result) throws JAXBException; void marshal(Object o, Result result) throws JAXBException; void marshal(Object o, Node node) throws JAXBException; void marshal(Object o, Node node) throws JAXBException; void marshal(Object o, ContentHandler ch) throws JAXBException; void marshal(Object o, ContentHandler ch) throws JAXBException; Node getNode(Object o) throws JAXBException; Node getNode(Object o) throws JAXBException; Object getProperty(String s) throws PropertyException; Object getProperty(String s) throws PropertyException; void setProperty(String s, Object o) throws PropertyException; void setProperty(String s, Object o) throws PropertyException; String JAXB_ENCODING = "jaxb.encoding"; String JAXB_ENCODING = "jaxb.encoding"; String JAXB_FORMATTED_OUTPUT = "jaxb.formatted.output"; String JAXB_FORMATTED_OUTPUT = "jaxb.formatted.output";}
15 Связывание XML схемы и Java Представления Binding XML Schema to Java Classes
16 Связывание имен: XML Java XML ИмяИмя КлассаИмя МетодаИмя Константы mixedCaseNameMixedCaseNamegetMixedCaseNameMIXED_CASE_NAME Answer42 getAnswer42ANSWER_42 name-with-dashesNameWithDashesgetNameWithDashesNAME_WITH_DASHES other_punct-charsOtherPunctCharsgetOtherPunctCharsOTHER_PUNCT_CHARS
17 Связывание составных типов данных Составной тип XML схемы Java интерфейс public interface PersonType { long getDepartmentId(); long getDepartmentId(); void setDepartmentId(long value); void setDepartmentId(long value); java.lang.String getName(); java.lang.String getName(); void setName(java.lang.String value); void setName(java.lang.String value); long getId(); long getId(); void setId(long value); void setId(long value);}
18 Свойства (Properties) Простое свойство (Simple Property) Вложенные компоненты XML схемы Java свойства java.lang.String getName(); void setName(java.lang.String value); Группа свойств (Collection Property) java.util.List getItem();
19 Перечисление (Type Safe Enumeration) Производный атомарный тип данных с ограничением типа «перечисление» Перечисление (Type Safe Enumeration) public class CountryType { private final String value; private final String value; protected CountryType(String v) { value = v; } protected CountryType(String v) { value = v; } public final static CountryType FRANCE public final static CountryType FRANCE = new CountryType("FRANCE"); = new CountryType("FRANCE"); public final static CountryType SWITZERLAND public final static CountryType SWITZERLAND = new generated.CountryType("SWITZERLAND"); = new generated.CountryType("SWITZERLAND");...}
20 Связывание встроенных типов данных Таблица соответствия встроенных типов (Simple Built-in Types) Тип данных XML схемы Тип данных Java xsd:stringjava.lang.String xsd:integerjava.math.BigInteger xsd:intint xsd:longlong xsd:decimaljava.math.BigDecimal xsd:floatfloat xsd:doubledouble xsd:booleanboolean xsd:bytebyte xsd:dateTimejava.util.Calendar xsd:anySimpleTypejava.lang.String
21 НаследованиеНаследование Наследование XML типов через ограничение (restriction) или расширение (extension) Java наследование
22 НаследованиеНаследование Наследование XML типов через ограничение (restriction) или расширение (extension) Java наследование public interface Address { java.lang.String getCity(); java.lang.String getCity(); void setCity(java.lang.String value); void setCity(java.lang.String value); java.lang.String getStreet(); java.lang.String getStreet(); void setStreet(java.lang.String value); void setStreet(java.lang.String value); java.lang.String getName(); java.lang.String getName(); void setName(java.lang.String value); void setName(java.lang.String value);} public interface USAddress extends Address { java.lang.String getState(); java.lang.String getState(); void setState(java.lang.String value); void setState(java.lang.String value); long getZip(); long getZip(); void setZip(long value); void setZip(long value);}
23 Переопределение Связывания Customizing JAXB Bindings
24 Зачем Переопределять? Стандартное связывания (Default Binding) Переопределение связывания: создание документации (Javadoc) создание документации (Javadoc) изменение правил именования изменение правил именования разрешить конфликтов имен разрешить конфликтов имен определить имена для констант перечислений определить имена для констант перечислений определять свои типы данных для атрибутов определять свои типы данных для атрибутов переопределять связывание встроенных типов переопределять связывание встроенных типов переопределять маршаллинг / демаршаллинг для пользовательских типов данных переопределять маршаллинг / демаршаллинг для пользовательских типов данных
25 Встроенное и Внешнее Переопределение Встроенное переопределение – внутри XML схемы Внешнее переопределение – отдельный файл * *
26 Использование Внешнего Переопределения Командная строка xjc –b xjc –b Скрипт Ant
27 Глобальные Переопределения [ collectionType = "collectionType" ] [ generateIsSetMethod= "true" | "false" | "1" | "0" ] [ enableFailFastCheck = "true" | "false" | "1" | "0" ] [ underscoreBinding = "asWordSeparator" | "asCharInWord" ] [ typesafeEnumBase = "typesafeEnumBase" ] [... ]*
28 Переопределения Уровня Схемы [ package ] [ package ] [... ]* [... ]*
29 Переопределения Типов Данных и Компонент [ implClass= "implClass" ] > [... ] [... ] Связывание Классов [... ] [... ] Связывание Классов ">
30 [ printMethod= "printMethod" ]/> Переопределения Типов Данных и Компонент Преобразование типов данных Java XML Переопределения Типов Данных и Компонент Преобразование типов данных Java XML">
31 Пример Настройки Связывания version="1.0">... ...">
32 Пример Настройки Связывания
33 Пример: Разрешение Конфликтов Имен cern.edh.cxml.objects.Money cern.edh.cxml.objects.MoneyType cern.edh.cxml.objects.Money cern.edh.cxml.objects.MoneyType
34 Пример: Преобразование Типов Данных 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) {...} }
35 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); } Пример: Преобразование Типов Данных
36 Пример: Перечисление 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);... }
37 JAXB vs. JAXP JAXB следует использовать когда нужно: Создавать объектные представления данных XML Создавать объектные представления данных XML Обрабатывать только верные данные Обрабатывать только верные данные Преобразовывать данные к различным типам Преобразовывать данные к различным типам JAXP следует использовать когда нужно: Обрабатывать документы, построенные на различных DTD Обрабатывать документы, построенные на различных DTD Обрабатывать документы, которые не обязательно являются правильными Обрабатывать документы, которые не обязательно являются правильными Применять XSLT преобразования Применять XSLT преобразования Обрабатывать лишь отдельные части XML документа Обрабатывать лишь отдельные части XML документа
38 Использование JAXB Система Электронного Документооборота (EDH) Приложение электронной коммерции B2B: стандарт cXML стандарт cXML ~ 100 интерфейсов объектной модели ~ 100 интерфейсов объектной модели ~ 100 классов реализации ~ 100 классов реализации
39 Спасибо за внимание!
40 XML элемент XML элемент Java интерфейс элемента Тип элемента объявлен составным (Complex type definition): public interface PersonType {... {... } public interface Person extends javax.xml.bind.Element, PersonType extends javax.xml.bind.Element, PersonType{}
41 XML элемент XML элемент Java интерфейс элемента Тип элемента объявлен простым (Simple type definition): public interface Name extends javax.xml.bind.Element extends javax.xml.bind.Element{ java.lang.String getValue(); java.lang.String getValue(); void setValue(java.lang.String value); void setValue(java.lang.String value);}
42 Уровни Действия Переопределения Каждый следующий уровень по отношению к предыдущему: наследует наследует переопределяет переопределяет Глобальные Переопределения Схема Тип Данных Компонент
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.