|
Если допустить синтаксическую ошибку в XML-документе, например, удалить закрывающую скобку в элементе telephone, будет выведено сообщение о фатальной ошибке:
FATAL - 7: 26 - Element type "telephone2456474" must be followed by either attribute specifications, ">" or "/>".
JAXB
В Java разработаны серьезные способы взаимодействия с XML. Начиная
с версии Java 6, эти механизмы включены в JDK.
Следующий пример на основе объекта класса Student создает структуру документа XML и сохраняет в ней информацию из объекта.
/* пример # 3: компонент JavaBean: Student.java */package chapt16.entity;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType. FIELD)
@XmlType(name = "Student", propOrder = {
"name",
"telephone",
"address"
}) //задание последовательности элементов XML
public class Student {
@XmlAttribute(required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter. class)
@XmlID
private String login;
@XmlElement(required = true)
private String name;
@XmlAttribute(required = true)
private String faculty;
@XmlElement(required = true)
private int telephone;
@XmlElement(required = true)
private Address address = new Address();
public Student(){} //необходим для генерации XML
public Student(String login, String name,
String faculty, int telephone, Address address) {
this. login = login;
this. name = name;
this. faculty = faculty;
this. telephone = telephone;
this. address = address;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this. login = login;
}
public String getName() {
return name;
}
public void setName(String name) {
this. name = name;
}
public String getFaculty() {
return faculty;
}
public void setFaculty(String faculty) {
this. faculty = faculty;
}
public int getTelephone() {
return telephone;
}
public void setTelephone(int telephone) {
this. telephone = telephone;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this. address = address;
}
public String toString() {
return "\nLogin: " + login + "\nName: "
+ name + "\nTelephone: " + telephone
+ "\nFaculty: " + faculty
+ address.toString();
}
@XmlRootElement
public static class Address { // внутренний класс
private String country;
private String city;
private String street;
public Address() {
}
public Address(String country, String city,
String street) {
this. country = country;
this. city = city;
this. street = street;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this. country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this. city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this. street = street;
}
public String toString() {
return "\nAddress:"
+ "\n\tCountry: " + country
+ "\n\tCity: " + city
+ "\n\tStreet: " + street + "\n";
}
}
}
Класс Student в целом соответствует документу students.xml и схеме students.xsd.
Данный класс в дальнейшем будет использоваться для создания списков и множеств объектов на основе информации, извлеченной из XML-документа.
/* пример # 4: создание XML-документа на основе объекта: MarshalMain.java */package chapt16.jaxb;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import chapt16.entity.Student;
import java.io.*;
public class MarshalMain {
public static void main(String[] args) {
try {
JAXBContext context =
JAXBContext. newInstance (Student. class);
Marshaller m = context.createMarshaller();
Student.Address addr =
new Student.Address("BLR","Minsk","Skoriny 4");
Student s = new Student("mendig", "Dmitry Terenya",
"rfe", 2066394, addr); //объект
m.marshal(s, new FileOutputStream("stud.xml"));
m.marshal(s, System. out); //на консоль
System. out. println("XML-файл создан");
} catch (FileNotFoundException e) {
System. out. println("XML-файл не найден");
e.printStackTrace();
} catch (JAXBException e) {
System. out. println("JAXB-исключения");
e.printStackTrace();
}
}
}
В результате компиляции и запуска программы будет создан XML-документ stud.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<student faculty="rfe" login="mendig">
<name>Dmitry Terenya</name>
<telephone>2066394</telephone>
<address>
<city>Minsk</city>
<country>BLR</country>
<street>Skoriny 4</street>
</address>
</student>
Возможно обратное создание на основе XML-схемы классов на языке Java:
/* пример # 5: описание классов University, Course и перечисления Faculty в XSD-схеме: university.xsd*/<schema xmlns="http://www.w3c.org/2001/XMLSchema"
xmlns:tns="http://www.university.net"
targetNamespace="http://www.university.net">
<element name="University">
<complexType>
<sequence>
<element name="faculty" type="tns:Faculty"/>
<element name="course" type="tns:Course"/>
</sequence>
</complexType>
</element>
<complexType name="Course">
<sequence>
<element name="name" type="string"/>
<element name="teacher" type="string"/>
</sequence>
</complexType>
<simpleType name="Faculty">
<restriction base="string">
<enumeration value="FPMI"></enumeration>
<enumeration value="MMF"></enumeration>
<enumeration value="Rfe"></enumeration>
</restriction>
</simpleType>
</schema>
Запуск выполняется с помощью командной строки:
Дата добавления: 2015-11-14; просмотров: 92 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Faculty CDATA #REQUIRED | | | Xjc university.xsd |