Basic Examples
This section describes the Basic 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 from scratch and then marshal it to XML data- Perform validation during unmarshalling
- Validate a Java content tree at runtime
Modify Marshal Example
The purpose of the Modify Marshal example is to demonstrate how to modify a Java content tree.
- The
<
INSTALL
>/examples/jaxb/modify-marshal/
class declares imports for three standard Java classes plus four JAXB binding framework classes and
Main.javaprimer.po
package:
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import primer.po.*;- A
JAXBContext
instance is created for handling classes generated inprimer.po
.
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
- An
Unmarshaller
instance is created, andpo.xml
is unmarshalled.
Unmarshaller u = jc.createUnmarshaller();
PurchaseOrder po =
(PurchaseOrder)u.unmarshal(
new FileInputStream( "po.xml" ) );set
methods are used to modify information in theaddress
branch of the content tree.
USAddress address = po.getBillTo();
address.setName( "John Bob" );
address.setStreet( "242 Main Street" );
address.setCity( "Beverly Hills" );
address.setState( "CA" );
address.setZip( new BigDecimal( "90210" ) );- A
Marshaller
instance is created, and the updated XML content is marshalled tosystem.out
. ThesetProperty
API is used to specify output encoding; in this case formatted (human readable) XML format.
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
m.marshal( po, System.out );Sample Output
Running
java Main
for this example produces the following output:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <purchaseOrder orderDate="1999-10-20-05:00"> <shipTo country="US"> <name>Alice Smith</name> <street>123 Maple Street</street> <city>Cambridge</city> <state>MA</state> <zip>12345</zip> </shipTo> <billTo country="US"> <name>John Bob</name> <street>242 Main Street</street> <city>Beverly Hills</city> <state>CA</state> <zip>90210</zip> </billTo> <items> <item partNum="242-NO"> <productName>Nosferatu - Special Edition (1929)</productName> <quantity>5</quantity> <USPrice>19.99</USPrice> </item> <item partNum="242-MU"> <productName>The Mummy (1959)</productName> <quantity>3</quantity> <USPrice>19.98</USPrice> </item> <item partNum="242-GZ"> <productName> Godzilla and Mothra: Battle for Earth/Godzilla vs. King Ghidora </productName> <quantity>3</quantity> <USPrice>27.95</USPrice> </item> </items> </purchaseOrder>Unmarshal Validate Example
The Unmarshal Validate example demonstrates how to enable validation during unmarshalling (Unmarshal-Time Validation). Note that JAXB provides functions for validation during unmarshalling but not during marshalling. Validation is explained in more detail in More About Validation.
- The
<
INSTALL
>/examples/jaxb/unmarshal-validate/Main.java
class declares imports for three standard Java classes plus seven JAXB binding framework classes and theprimer.po
package:
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigDecimal;
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.util.ValidationEventCollector;
import primer.po.*;- A
JAXBContext
instance is created for handling classes generated inprimer.po
.
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
- An
Unmarshaller
instance is created.
Unmarshaller u = jc.createUnmarshaller();
- The default JAXB Unmarshaller
ValidationEventHandler
is enabled to send to validation warnings and errors tosystem.out
. The default configuration causes the unmarshal operation to fail upon encountering the first validation error.
u.setValidating( true );
- An attempt is made to unmarshal
po.xml
into a Java content tree. For the purposes of this example, thepo.xml
contains a deliberate error.
PurchaseOrder po =
(PurchaseOrder)u.unmarshal(
new FileInputStream("po.xml"));- The default validation event handler processes a validation error, generates output to
system.out
, and then an exception is thrown.
} catch( UnmarshalException ue ) {
System.out.println( "Caught UnmarshalException" );
} catch( JAXBException je ) {
je.printStackTrace();
} catch( IOException ioe ) {
ioe.printStackTrace();Sample Output
Running
java Main
for this example produces the following output: