Listing 1 . Message.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="message" type="MessageType"/>
<xsd:complexType name="MessageType">
<xsd:sequence>
<xsd:element name="from" type="xsd:string"/>
<xsd:element name="to" minOccurs="1"
maxOccurs="unbounded"
type="xsd:string"/>
<xsd:element name="subject" type="xsd:string"/>
<xsd:element name="content" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Listing 2 . Ant build file build.xml
<?xml version="1.0"?>
<project basedir="." default="run">
<path id="classpath">
<fileset dir="../../../lib" includes="*.jar"
excludes="ant.jar"/>
<pathelement location="."/>
</path>
<taskdef name="xjc" classname="com.sun.tools.xjc.
XJCTask">
<classpath refid="classpath" />
</taskdef>
<target name="compile">
<xjc schema="Message.xsd" target="."
package="com.hks.schemas"/>
<javac srcdir="." destdir="." debug="on">
<classpath refid="classpath" />
</javac>
</target>
</project>
Listing 3 . ReadMessage.java
import java.util.*;
import java.io.*;
import javax.xml.bind.*;
import com.hks.schemas.*;
public class ReadMessage {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance
("com.hks.schemas");
Unmarshaller u = jc.createUnmarshaller();
u.setValidating(true);
Message msg = (Message) u.unmarshal(new
FileInputStream("Message.xml"));
System.out.println("From:"+msg.getFrom());
System.out.println("To:");
for (Iterator iter = msg.getTo().iterator();iter.
hasNext();) {
String to = (String) iter.next();
System.out.println("\t"+to);
}
System.out.println("Subject:"+msg.getSubject());
System.out.println("Content:\n"+msg.getContent());
}
}
Listing 4 . CreateMessage.java
import java.util.*;
import java.io.*;
import javax.xml.bind.*;
import com.hks.schemas.*;
public class CreateMessage {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance
("com.hks.schemas");
Marshaller m = jc.createMarshaller();
Message msg = ObjectFactory.createMessage();
msg.setFrom("hitesh@sys-con.com");
msg.getTo().add("hitesh@sys-con.com");
msg.getTo().add("jennifer@sys-con.com");
msg.setSubject("Inventory Alert");
msg.setContent("Inventory for ABC345 is down to 15%");
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
m.marshal(msg,System.out);
}
}
Listing 5 . SalesOrder.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
jxb:version="1.0">
<xsd:element name="salesOrder" type="SalesOrderType"/>
<xsd:complexType name="SalesOrderType">
<xsd:annotation>
<xsd:appinfo>
<jxb:class name="ISalesOrder"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="header" type="Header"/>
<xsd:element name="lines" type="Lines"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Header">
<xsd:sequence>
<xsd:element name="orderId" type="xsd:positiveInteger"/>
<xsd:element name="orderDate" type="xsd:date"/>
<xsd:element name="customerId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="Lines">
<xsd:sequence>
<xsd:element name="line" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="lineNo" type="xsd:positiveInteger">
<xsd:annotation>
<xsd:appinfo>
<jxb:property name="lineNumber"/>
<jxb:javaType name="short"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="itemNo" type="xsd:string"/>
<xsd:element name="quantity" type="xsd:
positiveInteger"/>
<xsd:element name="price" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Listing 6 . OrderValue.java
import java.util.*;
import java.io.*;
import javax.xml.bind.*;
import com.hks.schemas.*;
public class OrderValue {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance
("com.hks.schemas");
Unmarshaller u = jc.createUnmarshaller();
ISalesOrder order = (ISalesOrder) u.unmarshal(
new FileInputStream("ISalesOrder.xml"));
double amount = 0;
for (Iterator iter = order.getLines().getLine().
iterator();iter.hasNext();) {
Lines.LineType line = (Lines.LineType) iter.next();
int qty = line.getQuantity().intValue();
double price = line.getPrice().doubleValue();
amount = amount + (qty*price);
}
System.out.println("Total Order Value: $"+amount);
}
}
Listing 7 . AddComments.java
import java.util.*;
import java.io.*;
import javax.xml.bind.*;
import com.hks.schemas.*;
public class Main {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance
("com.hks.schemas");
Unmarshaller u = jc.createUnmarshaller();
u.setValidating(true);
SalesOrder order = (SalesOrder) u.unmarshal(
new FileInputStream("SalesOrder.xml"));
order.setComment("Processed by JAXB!");
Marshaller m = jc.createMarshaller();
...
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
m.marshal(order,System.out);
}
}