Java xml jaxb примеры

Basic Examples

This section describes the Basic JAXB examples (Modify Marshal, Unmarshal Validate) that demonstrate how to:

  • Unmarshal an XML document into a Java content tree and access the data contained within it
  • Modify a Java content tree
  • Use the ObjectFactory class to create a Java content tree and then marshal it to XML data
  • Perform validation during unmarshalling
  • Validate a Java content tree at runtime

Modify Marshal Example

The Modify Marshal example demonstrates how to modify a Java content tree.

    The jaxb-ri-install/samples/modify-marshal/src/Main.java class declares importing of three standard Java classes, five JAXB binding framework classes and the primer.po package:

import java.io.FileInputStream; import java.io.IOException; import java.math.BigDecimal; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import primer.po.*;
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
Unmarshaller u = jc.createUnmarshaller(); PurchaseOrder po = (PurchaseOrder) u.unmarshal(new FileInputStream("po.xml"));
USAddress address = po.getBillTo(); address.setName("John Bob"); address.setStreet("242 Main Street"); address.setCity("Beverly Hills"); address.setState("CA"); address.setZip(new BigDecimal address.setName("John Bob"); address.setStreet("242 Main Street"); address.setCity("Beverly Hills"); address.setState("CA"); address.setZip(new BigDecimal("90210"));
Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.marshal(po, System.out);

Building and Running the Modify Marshal Example Using Ant

To compile and run the Modify Marshal example using Ant, in a terminal window, go to the jaxb-ri-install/samples/modify-marshal/ directory and type the following:

Читайте также:  Python dataframe посчитать количество строк

Unmarshal Validate Example

The Unmarshal Validate example demonstrates how to enable validation during unmarshalling. Note that JAXB provides functions for validation during unmarshalling but not during marshalling. Validation is explained in more detail in More About Validation.

    The jaxb-ri-install/samples/unmarshal-validate/src/Main.java class declares imports for one standard Java class, eleven JAXB binding framework classes, and the primer.po package:

import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.UnmarshalException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.ValidationEvent; import javax.xml.bind.ValidationEventHandler; import javax.xml.bind.ValidationEventLocator; import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import primer.po.*;
JAXBContext jc = JAXBContext.newInstance("primer.po");
Unmarshaller u = jc.createUnmarshaller();
PurchaseOrder po = (PurchaseOrder)u.unmarshal( new FileInputStream("po.xml"));

> catch( UnmarshalException ue ) < System.out.println("Caught UnmarshalException"); >catch( JAXBException je ) < je.printStackTrace(); >catch( IOException ioe )

Building and Running the Unmarshal Validate Example Using Ant

To compile and run the Unmarshal Validate example using Ant, in a terminal window, go to the jaxb-ri-install/samples/unmarshal-validate/ directory and type the following:

Источник

Использование Java JAXB на примерах

В этом уроке покажу как использовать библиотеку JAXB для работы с XML. На примерах рассмотрим как объекты Java записываются в файлы XML, а данные XML считываются в объекты.

Java Architecture for XML Binding (JAXB) – это программная структура, которая позволяет разработчикам отображать классы Java в представления XML. JAXB позволяет делать сохранение объекта в файл и обратно в объекты.

В Java 9 JAXB переместился в отдельный модуль java.xml. В Java 9 и Java 10 нам нужно использовать параметр –add-modules = java.xml.bind. В Java 11 JAXB был удален из JDK, и нам нужно добавить его в проект в виде отдельной библиотеки через Maven или Gradle.

В наших примерах мы используем JDK 11 и Maven для создания наших приложений.

Определение JAXB – что это?

Маршалинг – это процесс преобразования объектов Java в документы XML. Unmarshalling – это процесс чтения документов XML в объекты Java. Класс JAXBContext обеспечивает точку входа клиента в API JAXB. Он предоставляет API для маршалинга, демаршалинга(unmarshal) и проверки.

Следующий файл POM содержит необходимые JAR JAXB настройки.

  4.0.0 JavaWriteXmlJaxbEx JavaWriteXmlJaxbEx 1.0-SNAPSHOT 11 11   javax.xml.bind jaxb-api 2.2.11  com.sun.xml.bind jaxb-core 2.2.11  com.sun.xml.bind jaxb-impl 2.2.11  javax.activation activation 1.1.1     maven-assembly-plugin  package single     jar-with-dependencies   com.zetcode.JavaWriteXmlJaxbEx       

В дополнение к включению зависимостей JAXB мы используем плагин maven-assembly-plugin, чтобы упаковать все зависимости в один JAR-файл.

Пример использования JAXB для записи XML

В первом примере мы записываем объекты Java в файл XML.

package com.zetcode; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name = "book") // Определение порядка @XmlType(propOrder = < "author", "name", "publisher", "isbn" >) public class Book < private String name; private String author; private String publisher; private String isbn; // Смена названия @XmlElement(name = "title") public String getName() < return name; >public void setName(String name) < this.name = name; >public String getAuthor() < return author; >public void setAuthor(String author) < this.author = author; >public String getPublisher() < return publisher; >public void setPublisher(String publisher) < this.publisher = publisher; >public String getIsbn() < return isbn; >public void setIsbn(String isbn) < this.isbn = isbn; >@Override public String toString() < final StringBuilder sb = new StringBuilder("Book<"); sb.append("name='").append(name).append('\''); sb.append(", author='").append(author).append('\''); sb.append(", publisher='").append(publisher).append('\''); sb.append(", isbn='").append(isbn).append('\''); sb.append('>'); return sb.toString(); > >

Этот bean-компонент будет преобразован в определенный тег XML.

С помощью аннотации @XmlRootElement мы определяем имя тега XML.

С помощью атрибута propOrder @ XmlType мы определяем порядок подэлементов.

@XmlElement(name = «title»)
public String getName() return name;
>

Мы можем изменить имя элемента по умолчанию на заголовок.

package com.zetcode; import java.util.ArrayList; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; //класс "Bookstore.java" является корневым элементом нашего примера. @XmlRootElement(namespace = "com.zetcode") public class BookStore < // XmLElementWrapper генерирует элемент-оболочку вокруг представления XML @XmlElementWrapper(name = "bookList") // XmlElement устанавливает имя @XmlElement(name = "book") private ArrayList bookList; private String name; private String location; public void setBookList(ArrayList bookList) < this.bookList = bookList; >public ArrayList getBooksList() < return bookList; >public String getName() < return name; >public void setName(String name) < this.name = name; >public String getLocation() < return location; >public void setLocation(String location) < this.location = location; >>

BookStore – это класс, который содержит список, в который мы помещаем наши объекты книги.

@XmlRootElement(namespace = «com.zetcode»)
public class BookStore <
Мы определяем корневой элемент с помощью аннотации @XmlRootElement.

// XmLElementWrapper генерирует элемент-оболочку вокруг представления XML
@XmlElementWrapper(name = «bookList»)
// XmlElement устанавливает имя
@XmlElement(name = «book»)
private ArrayList bookList;

Аннотация @XmlElementWrapper определяет элемент-обертку вокруг элементов книги. Аннотация @XmlElement определяет имя элемента XML, который находится внутри оболочки.

package com.zetcode; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import java.io.File; import java.util.ArrayList; public class JavaWriteXmlJaxbEx < private static final String BOOKSTORE_XML = "src/main/resources/bookstore.xml"; public static void main(String[] args) throws JAXBException < var bookList = new ArrayList(); // создаем объекты книги, добавляем их в книжный магазин // и преобразуем книжный магазин в файл XML. var book1 = new Book(); book1.setIsbn("978-0060554736"); book1.setName("The Game"); book1.setAuthor("Neil Strauss"); book1.setPublisher("Harpercollins"); bookList.add(book1); var book2 = new Book(); book2.setIsbn("978-3832180577"); book2.setName("Feuchtgebiete"); book2.setAuthor("Charlotte Roche"); book2.setPublisher("Dumont Buchverlag"); bookList.add(book2); // Мы создаем два объекта книги. var bookstore = new BookStore(); bookstore.setName("Fraport Bookstore"); bookstore.setLocation("Livres belles"); bookstore.setBookList(bookList); // Мы создаем новый JAXBContext. // передаем список классов, которые должен распознать новый объект контекста. var context = JAXBContext.newInstance(BookStore.class); var m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // записать System.out m.marshal(bookstore, System.out); // Из контекста получаем маршалер с помощью createMarshaller(). // устанавливаем свойство для получения форматированного вывода. m.marshal(bookstore, new File(BOOKSTORE_XML)); >>

jaxb java как работает

Пример чтения XML JAXB (unmarshal)

Во втором примере мы считываем данные обратно в объекты Java.

package com.zetcode; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; public class JavaReadXmlJaxbEx < private static final String BOOKSTORE_XML = "src/main/resources/bookstore.xml"; public static void main(String[] args) throws JAXBException, FileNotFoundException < // создаем JAXB-контекст и unmarshal var context = JAXBContext.newInstance(BookStore.class); var um = context.createUnmarshaller(); var bookstore = (BookStore) um.unmarshal(new InputStreamReader( new FileInputStream(BOOKSTORE_XML), StandardCharsets.UTF_8)); var bookList = bookstore.getBooksList(); bookList.forEach((book) ->< System.out.println(book); >); > >

Средняя оценка 4.1 / 5. Количество голосов: 14

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Видим, что вы не нашли ответ на свой вопрос.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Источник

Пример работы с JAXB. Сохраняем Java объект в XML, восстанавливаем объект из XML

Пример работы с JAXB. Сохраняем Java объект в XML, восстанавливаем объект из XML

JAXB (Java Architecture for XML Binding) — Java API для маршалинга объекта в XML и восстановления объекта из XML файла. Изначально JAXB был отдельным проектом, но своей простотой и удобством быстро завоевал популярность Java разработчиков. Именно поэтому в Java 6 JAXB стал частью JDK, а в Java 7 прокачался до версии 2.0.

Ранее мы уже работали с XML в Java с помощью JDOM Parser, StAX Cursor API, DOM Parser и других способов, а в этой статье научимся отображать (ставить в соответствие) Java классы и XML файлы с помощью JAXB.

Теория по JAXB

JAXB использует аннотации, поэтому работать с ним легко и просто. Чтобы сохранить Java объект в XML файл, мы должны проставить необходимые JAXB аннотации в классе и методах класса, а затем создать объект Marshaller для преобразования/сериализации/сохранения/маршалинга (кому как удобно это называть) объекта в XML.

Также есть специальный класс JAXBContext , который является точкой входа для JAXB и предоставляет методы для сохранения/восстановления объекта.

Основные JAXB аннотации

  • Аннотация @XmlRootElement определяет корневой элемент для содержимого XML.
  • Аннотация @XmlType используется для упорядочения элементов в XML.
  • Аннотацией @XmlTransient помечается то, что не будет не записано в XML.
  • Аннотацией @XmlAttribute помечается то, что будет использовано в качестве атрибута.
  • Аннотация @XmlElement(name=»qwerty») — создаст элемент с именем «qwerty».

Также часто используются следующие аннотации:

  • @XmlElementWrapper — обертка вокруг коллекций для читабельности сгенерированного XML
  • Объекты другого класса помечаются аннотацией @XmlSeeAlso .
  • @XmlEnum и @XmlEnumValue — для Enum и значений
  • @XmlElements — создание контейнеров для нескольких @XmlElement

Подробнее с другими аннотациями вы можете ознакомиться на официальном сайте JAXB.

Сохраняем Java объект в XML и восстанавливаем его с помощью JAXB

Ниже представлена простая программа преобразования объекта в XML и его обратная конвертация из XML в Java объект.

Создадим класс Student и расставим нужные нам аннотации:

Источник

Оцените статью