Теория:
Маршаллизация — преобразование данных из java-объекта в XML
Демаршаллизация — преобразование данных из XML в java-объекты. Т.е. процесс обратный маршаллизации.

Используем самую простую XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	version="1.0">
	<xsd:element name="book">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="title" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>Название книги</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="author">
					<xsd:annotation>
						<xsd:documentation>ФИО автора книги</xsd:documentation>
					</xsd:annotation>
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:minLength value="2" />
							<xsd:maxLength value="255" />
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="price">
					<xsd:simpleType>
						<xsd:restriction base="xsd:decimal">
							<xsd:totalDigits value="10" />
							<xsd:fractionDigits value="2" />
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>

</xsd:schema>

На основании XSD получаем JAXB-класс:

import java.math.BigDecimal;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="title" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="author">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *               &lt;minLength value="2"/>
 *               &lt;maxLength value="255"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *         &lt;element name="price">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}decimal">
 *               &lt;totalDigits value="10"/>
 *               &lt;fractionDigits value="2"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "title",
    "author",
    "price"
})
@XmlRootElement(name = "book")
public class Book {

    @XmlElement(required = true)
    protected String title;
    @XmlElement(required = true)
    protected String author;
    @XmlElement(required = true)
    protected BigDecimal price;

    /**
     * Gets the value of the title property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getTitle() {
        return title;
    }

    @Override
	public String toString() {
		return "Book [title=" + title + ", author=" + author + ", price="
				+ price + "]";
	}

	/**
     * Sets the value of the title property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setTitle(String value) {
        this.title = value;
    }

    /**
     * Gets the value of the author property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getAuthor() {
        return author;
    }

    /**
     * Sets the value of the author property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setAuthor(String value) {
        this.author = value;
    }

    /**
     * Gets the value of the price property.
     * 
     * @return
     *     possible object is
     *     {@link BigDecimal }
     *     
     */
    public BigDecimal getPrice() {
        return price;
    }

    /**
     * Sets the value of the price property.
     * 
     * @param value
     *     allowed object is
     *     {@link BigDecimal }
     *     
     */
    public void setPrice(BigDecimal value) {
        this.price = value;
    }

}

Класс для Маршаллизации (object — XML) и демаршаллизации (XML — object)

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class JaxbParser {

	/**
	 * object - XML (<b>Marshaller</b>)
	 */
	public void saveObj(String pathToFile, Object o) throws JAXBException {
		JAXBContext context = JAXBContext.newInstance(o.getClass());
		Marshaller m = context.createMarshaller();
		m.marshal(o, new File(pathToFile));
	}
	
	/**
	 * XML - object (<b>Unmarshaller</b>)
	 */
	public Object getObject(String pathToFile, Class<?> c) throws JAXBException {
		JAXBContext context = JAXBContext.newInstance(c);
		Unmarshaller unmarshaller = context.createUnmarshaller();
		Object object = unmarshaller.unmarshal(new File(pathToFile));

		return object;
	}
}

Сохранить данные в XML:

	
		Book myBook = new Book();
		myBook.setAuthor("Ivanov Ivan");
		myBook.setPrice(new BigDecimal("123.98"));
		myBook.setTitle("WAR AND PEACE");
		System.out.println(myBook);
		
		JaxbParser parser = new JaxbParser();
		parser.saveObj("book1.xml", myBook);

В результате у нас в корне проекта создасться файл book.xml(Не забываем сделать рефреш прокекта (кнопка F5), а то сразу не отбражается)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<book>
	<title>WAR AND PEACE</title>
	<author>Ivanov Ivan</author>
	<price>123.98</price>
</book>

Кусок кода для анмаршаллера:

Book  b2 = (Book) parser.getObject("book.xml", Book.class);
		//123.98
		System.out.println(b2.getPrice());
Реклама