Skip to main content

JAXB marshall and unmarshall

  1. write xsd schema file(s)
  2. use xjc tool to compile xsd schema file(s) into java classes
  3. create a java object
  4. marshall the object into a file
  5. unmarshall the object from a file

1. drink.xsd schema file



   <xs:element name="drink">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="alcohol" type="AlcoholEnum" minOccurs="0" maxOccurs="10" />
            <xs:element name="ice" type="xs:boolean" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:simpleType name="AlcoholEnum">
      <xs:restriction base="xs:string">
         <xs:enumeration value="vodka" />
         <xs:enumeration value="rum" />
         <xs:enumeration value="whiskey" />
         <xs:enumeration value="Unknown" />
      </xs:restriction>
   </xs:simpleType>

2. compile xsd file into java classes
xjc drink.xsd

3 - 6 marshall and unmarshall using JAXB
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import programmerutilities.blogspot.com.AlcoholEnum;
import programmerutilities.blogspot.com.Drink;

public class MarshallDrink {

   public static void main(String[] args) {

      Drink drink = new Drink();
      drink.setName("Whiskey on te Rock");
      drink.setIce(true);
      List<alcoholenum> alcoholList = drink.getAlcohol();
      alcoholList.add(AlcoholEnum.WHISKEY);

      // marshall and unmarshall the drink object using a file
      try {
         File file = new File("drink.xml");

         JAXBContext context = JAXBContext.newInstance(Drink.class);

         Marshaller marshaller = context.createMarshaller();
         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
         marshaller.marshal(drink, file);

         Unmarshaller unmarshaller = context.createUnmarshaller();

         Drink unmarshalledDrink = (Drink) unmarshaller.unmarshal(file);

      } catch (JAXBException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
}

Comments