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

Popular posts from this blog

ShutDownHook - the last breath of an application

ShutDownHook allows you to perform operations (e.g. close opened resources, remove temporary files and so on) just before virtual machine shuts down. A documentation says that JVM may shut down in two cases: program finishes execution normally when all threads finishes their work (except deamon-threads like garbage collector) virtual machine receives a termination signal (for example after sending kill signal under unix or ctrl + C key combination under windows) Below is an example which will start endless loop which do nothing. But an important thing in this code is a part where shutDownHook is added. When an termination signal will be send to JVM a code from a run() method will be executed just before JVM shuts down. public class ShutDownHook { public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.out.println("Close opened resources"); } }); while (true) { // do nothing } } }

scala Hello World

The code below prints Hello World! Hello.scala file (a name of file doesn't matter) object HelloWorld { def main(args: Array[String]) { println("Hello World!") } } Key word object is used to create a singleton object. To run this script use scala interpretor (check scala command line tools ).

Unix - useful command line tools

This post lists unix command line tools which are very helpful during a work with these systems. alias create alias for a command // use aliast to a command alias ls='ls -ltr' awk // split text into tokens using '.' separator echo testFile.txt | awk -F'.' '{print$2}' // prints 'txt' chmod set access privileges to a file // owner rwx, group r-x, others --- chmod 750 fileName.txt Meaning of numbers: owner, group, others (respectively) 4 - read 2 - write 1 - execute find search for files // search for all files in a current directory and display lines with a 'stringToFind' find . -name "*.*" | xargs grep 'stringToFind' // search for a file and skipp all info about errors find . -name 'testFile.txt' 2> /dev/null grep use regexp to display lines from a file // display all lines without a # sign grep ^[^#] testFile.txt // display all lines with a # sign grep ^# testFile.txt gzip compress and decompre...