Скачать презентацию CERN European Organization for Nuclear Research IT Скачать презентацию CERN European Organization for Nuclear Research IT

e29239e894327fb53a537959255f5365.ppt

  • Количество слайдов: 42

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

JAXB: n The Java Architecture for XML Binding n Спецификация принята 8 Января 2003 JAXB: n The Java Architecture for XML Binding n Спецификация принята 8 Января 2003 года http: //java. sun. com/xml/downloads/jaxb. html Доступные реализации: n SUN, является частью Java Web Services Developer Pack http: //java. sun. com/xml/downloads/jaxb. html n Apache JAXME http: //ws. apache. org/jaxme/

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

Пример: XML <orders-list> <order> <number>1001</number> <date>2005 -01 -01</date> <description>First Order</description> <amount>10</amount> </order> <number>1002</number> <date>2005 Пример: XML 1001 2005 -01 -01 First Order 10 1002 2005 -01 -02 Second Order 20. 2

" src="https://present5.com/presentation/e29239e894327fb53a537959255f5365/image-5.jpg" alt="Пример: XML Schema " /> Пример: XML Schema

Пример: Генерация Java классов Из командной строки: %jwsdp. home%jaxbbinxjc. bat -p generated -d src Пример: Генерация Java классов Из командной строки: %jwsdp. home%jaxbbinxjc. bat -p generated -d src simple-order. xsd Из скрипта Ant:

Пример: сгенерированные Java классы Orders. List. Type. java public interface Orders. List. Type { Пример: сгенерированные Java классы Orders. List. Type. java public interface Orders. List. Type { java. util. List get. Order(); } Order. Type. java public interface Order. Type { double get. Amount(); void set. Amount(double value); java. lang. String get. Description(); void set. Description(java. lang. String value); java. util. Calendar get. Date(); void set. Date(java. util. Calendar value); long get. Number(); void set. Number(long value); }

Пример: работа с JAXB Чтение из XML файла JAXBContext jaxb. Ctx = JAXBContext. new. Пример: работа с JAXB Чтение из XML файла JAXBContext jaxb. Ctx = JAXBContext. new. Instance("generated"); Unmarshaller unmarshaller = jaxb. Ctx. create. Unmarshaller(); Orders. List. Type orders = (Orders. List. Type)unmarshaller. unmarshal( new File("simple-order. xml")); List orders. List = orders. get. Order(); for (int i = 0; i < orders. List. size(); i++) { Order. Type order = (Order. Type)orders. List. get(i); System. out. println("Number = " + order. get. Number() + ", amount = " + order. get. Amount()); }. . .

Пример: работа с JAXB Изменение XML файла. . . Object. Factory object. Factory = Пример: работа с JAXB Изменение XML файла. . . Object. Factory object. Factory = new Object. Factory(); Order new. Order = object. Factory. create. Order(); new. Order. set. Number(2006); new. Order. set. Date(Calendar. get. Instance()); new. Order. set. Description("New Order"); new. Order. set. Amount(100); orders. get. Order(). add(new. Order); Marshaller marshaller = jaxb. Ctx. create. Marshaller(); marshaller. marshal(orders, new File. Output. Stream(new File("simple-order. xml")));

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

Пакет Связывания Основные операции: n маршаллинг (marshalling) n демаршаллинг (unmarshalling) n проверка (validation) Класс Пакет Связывания Основные операции: n маршаллинг (marshalling) n демаршаллинг (unmarshalling) n проверка (validation) Класс javax. xml. bind. JAXBContext - "точка входа" в JAXB API public abstract class JAXBContext { static JAXBContext new. Instance(String context. Path) static JAXBContext new. Instance(String context. Path, Class. Loader context. Path. CL) abstract Unmarshaller create. Unmarshaller(); abstract Marshaller create. Marshaller(); abstract Validator create. Validator(); }

Проверка XML документа JAXB предоставляет три варианта проверки XML документа: n во время демаршаллинга Проверка XML документа JAXB предоставляет три варианта проверки XML документа: n во время демаршаллинга (unmarshall-time validation) n по требованию (on-demand validation) n "на лету" (fail-fast validation) Validator позволяет проверять объектное представление документа public interface Validator { Validation. Event. Handler get. Event. Handler() void set. Event. Handler(Validation. Event. Handler handler) boolean validate(java. lang. Object subroot. Object) boolean validate. Root(java. lang. Object root. Object) }

Демаршаллинг Unmarshaller читает XML документ, выполняет его проверку и строит объектную модель public interface Демаршаллинг Unmarshaller читает XML документ, выполняет его проверку и строит объектную модель public interface Unmarshaller { boolean is. Validating() throws JAXBException; void set. Validating(boolean b) throws JAXBException; Validation. Event. Handler get. Event. Handler() throws JAXBException; void set. Event. Handler(Validation. Event. Handler handler) throws JAXBException; Object Object } unmarshal(File file) throws JAXBException; unmarshal(Input. Stream is) throws JAXBException; unmarshal(URL url) throws JAXBException; unmarshal(Source source) throws JAXBException; unmarshal(Node node) throws JAXBException; unmarshal(Input. Source is) throws JAXBException;

Маршаллинг Marshaller сохраняет объектную модель в XML документ public interface Marshaller { Validation. Event. Маршаллинг Marshaller сохраняет объектную модель в XML документ public interface Marshaller { Validation. Event. Handler get. Event. Handler() throws JAXBException; void set. Event. Handler(Validation. Event. Handler handler) throws JAXBException; void void Node marshal(Object marshal(Object get. Node(Object o, o, o, o) Output. Stream os) throws JAXBException; Writer writer) throws JAXBException; Result result) throws JAXBException; Node node) throws JAXBException; Content. Handler ch) throws JAXBException; Object get. Property(String s) throws Property. Exception; void set. Property(String s, Object o) throws Property. Exception; String JAXB_ENCODING = "jaxb. encoding"; String JAXB_FORMATTED_OUTPUT = "jaxb. formatted. output"; }

Связывание XML схемы и Java Представления Binding XML Schema to Java Classes Связывание XML схемы и Java Представления Binding XML Schema to Java Classes

Связывание имен: XML Java XML Имя Класса Имя Метода Имя Константы Mixed. Case. Name Связывание имен: XML Java XML Имя Класса Имя Метода Имя Константы Mixed. Case. Name get. Mixed. Case. Name MIXED_CASE_NAME Answer 42 get. Answer 42 ANSWER_42 name-with-dashes Name. With. Dashes get. Name. With. Dashes NAME_WITH_DASHES other_punct-chars Other. Punct. Chars get. Other. Punct. Chars OTHER_PUNCT_CHARS mixed. Case. Name Answer 42

Связывание составных типов данных Составной тип XML схемы Java интерфейс <xsd: complex. Type name= Связывание составных типов данных Составной тип XML схемы Java интерфейс public interface Person. Type { long get. Department. Id(); void set. Department. Id(long value); java. lang. String get. Name(); void set. Name(java. lang. String value); long get. Id(); void set. Id(long value); }

Свойства (Properties) Вложенные компоненты XML схемы Java свойства Простое свойство (Simple Property) <xsd: element Свойства (Properties) Вложенные компоненты XML схемы Java свойства Простое свойство (Simple Property) java. lang. String get. Name(); void set. Name(java. lang. String value); Группа свойств (Collection Property) java. util. List get. Item();

Перечисление (Type Safe Enumeration) Производный атомарный тип данных с ограничением типа «перечисление» Перечисление (Type Перечисление (Type Safe Enumeration) Производный атомарный тип данных с ограничением типа «перечисление» Перечисление (Type Safe Enumeration) public class Country. Type { private final String value; protected Country. Type(String v) { value = v; } public final static Country. Type FRANCE = new Country. Type("FRANCE"); public final static Country. Type SWITZERLAND = new generated. Country. Type("SWITZERLAND"); . . . }

Связывание встроенных типов данных Таблица соответствия встроенных типов (Simple Built-in Types) Тип данных XML Связывание встроенных типов данных Таблица соответствия встроенных типов (Simple Built-in Types) Тип данных XML схемы Тип данных Java xsd: string java. lang. String xsd: integer java. math. Big. Integer xsd: int xsd: long xsd: decimal java. math. Big. Decimal xsd: float xsd: double xsd: boolean xsd: byte xsd: date. Time java. util. Calendar xsd: any. Simple. Type java. lang. String

Наследование XML типов через ограничение (restriction) или расширение (extension) Java наследование <xsd: complex. Type Наследование XML типов через ограничение (restriction) или расширение (extension) Java наследование

Наследование XML типов через ограничение (restriction) или расширение (extension) Java наследование public interface Address Наследование XML типов через ограничение (restriction) или расширение (extension) Java наследование public interface Address { java. lang. String get. City(); void set. City(java. lang. String value); java. lang. String get. Street(); void set. Street(java. lang. String value); java. lang. String get. Name(); void set. Name(java. lang. String value); } public interface USAddress extends Address { java. lang. String get. State(); void set. State(java. lang. String value); long get. Zip(); void set. Zip(long value); }

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

Зачем Переопределять? Стандартное связывания (Default Binding) Переопределение связывания: n создание документации (Javadoc) n изменение Зачем Переопределять? Стандартное связывания (Default Binding) Переопределение связывания: n создание документации (Javadoc) n изменение правил именования n разрешить конфликтов имен n определить имена для констант перечислений n определять свои типы данных для атрибутов n переопределять связывание встроенных типов n переопределять маршаллинг / демаршаллинг для пользовательских типов данных

Встроенное и Внешнее Переопределение Встроенное переопределение – внутри XML схемы <xs: annotation> <xs: appinfo> Встроенное и Внешнее Переопределение Встроенное переопределение – внутри XML схемы Внешнее переопределение – отдельный файл *

Использование Внешнего Переопределения Командная строка xjc –b <file> <schema> Скрипт Ant <xjc schema= Использование Внешнего Переопределения Командная строка xjc –b Скрипт Ant

Глобальные Переопределения <global. Bindings> [ collection. Type = Глобальные Переопределения [ collection. Type = "collection. Type" ] [ generate. Is. Set. Method= "true" | "false" | "1" | "0" ] [ enable. Fail. Fast. Check = "true" | "false" | "1" | "0" ] [ underscore. Binding = "as. Word. Separator" | "as. Char. In. Word" ] [ typesafe. Enum. Base = "typesafe. Enum. Base" ] [ . . . ]*

Переопределения Уровня Схемы <schema. Bindings> [ <package> package </package> ] [ <name. Xml. Transform>. Переопределения Уровня Схемы [ package ] [ . . . ]* . . . ] [ ] [ ]

Переопределения Типов Данных и Компонент Связывание Классов <class [ name = Переопределения Типов Данных и Компонент Связывание Классов [ . . . ] Связывание Свойств . . . ] [ . . . ] . . .

Переопределения Типов Данных и Компонент Преобразование типов данных Java XML <java. Type name= Переопределения Типов Данных и Компонент Преобразование типов данных Java XML

Пример Настройки Связывания <jxb: bindings xmlns: jxb= Пример Настройки Связывания . . .

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

Пример: Разрешение Конфликтов Имен cern. edh. cxml. objects. Money. Type

Пример: Преобразование Типов Данных package cern. edh. cxml; public class Date. Converter { public static java. util. Date parse. Date. Tz(String lexical. Date) throws Parse. Exception {. . . } public static String print. Date. Tz(java. util. Date date) {. . . } }

Пример: Преобразование Типов Данных . . . public interface CXMLType {. . . java. util. Date get. Timestamp(); void set. Timestamp(java. util. Date value); } . . .

Пример: Перечисление public class Deployment. Mode. Value { public final static Deployment. Mode. Value PRODUCTION = new Deployment. Mode. Value(_PRODUCTION); public final static Deployment. Mode. Value TEST = new Deployment. Mode. Value(_TEST); . . . }

JAXB vs. JAXP JAXB следует использовать когда нужно: n Создавать объектные представления данных XML JAXB vs. JAXP JAXB следует использовать когда нужно: n Создавать объектные представления данных XML n Обрабатывать только верные данные n Преобразовывать данные к различным типам JAXP следует использовать когда нужно: n Обрабатывать документы, построенные на различных DTD n Обрабатывать документы, которые не обязательно являются правильными n Применять XSLT преобразования n Обрабатывать лишь отдельные части XML документа

Использование JAXB Система Электронного Документооборота (EDH) Приложение электронной коммерции B 2 B: n стандарт Использование JAXB Система Электронного Документооборота (EDH) Приложение электронной коммерции B 2 B: n стандарт c. XML n ~ 100 интерфейсов объектной модели n ~ 100 классов реализации

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

XML элемент Java интерфейс элемента Тип элемента объявлен составным (Complex type definition): <xsd: complex. XML элемент Java интерфейс элемента Тип элемента объявлен составным (Complex type definition): . . . public interface Person. Type {. . . } public interface Person extends javax. xml. bind. Element, Person. Type { }

XML элемент Java интерфейс элемента Тип элемента объявлен простым (Simple type definition): <xsd: element XML элемент Java интерфейс элемента Тип элемента объявлен простым (Simple type definition): public interface Name extends javax. xml. bind. Element { java. lang. String get. Value(); void set. Value(java. lang. String value); }

Уровни Действия Переопределения Компонент Тип Данных Схема Глобальные Переопределения Каждый следующий уровень по отношению Уровни Действия Переопределения Компонент Тип Данных Схема Глобальные Переопределения Каждый следующий уровень по отношению к предыдущему: n наследует n переопределяет