Code Snippet

Just another Code Snippet site

[Java] Marshalling/Unmarshaling Java / XML

Basic solution using Xstream :

     // From XML to  Java
     XStream xstream = new XStream();
     xstream.alias("ClassA", ClassA.class);
     xstream.alias("ClassB", ClassB.class);
     xstream.alias("ClassC", ClassC.class);

     ClassA beanFromXml = (ClassA) xstream.fromXML(new FileReader(new File("ClassA.xml")));

     // From Java to XML
     xstream.toXML(beanFromXml, new FileWriter(new File("ClassA-2.xml")));

Maven dependency :

     <!-- XStream -->
     <dependency>
          <groupId>com.thoughtworks.xstream</groupId>
          <artifactId>xstream</artifactId>
          <version>1.4.3</version>
     </dependency>

Marshalling / Unmarshalling using JAXB :

     // From Java to XML : 
     JAXBContext jc = JAXBContext.newInstance(JAXB_CONTEXT);
     Marshaller m = jc.createMarshaller();
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
     m.marshal(new ClassA(), new FileWriter(new File("ClassA.xml")));

     // From XML to Java : 
     JAXBContext jc = JAXBContext.newInstance(JAXB_CONTEXT);
     Unmarshaller u = jc.createUnmarshaller();
     ClassA beanFromXml = (ClassA) u.unmarshal(new FileReader(new File("ClassA.xml")));

Maven dependency :

     <dependency>
          <groupId>javax.xml.bind</groupId>
          <artifactId>jaxb-api</artifactId>
          <version>2.1</version>
     </dependency>

     <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-impl</artifactId>
          <version>2.2-promoted-b65</version>
     </dependency>

For JAXB, the root XML element should be annoted with : @XmlRootElement
Each sub element could be annoted with : @XmlType(name = ““)
each attribute with @XmlElement(name = ““)


One thought on “[Java] Marshalling/Unmarshaling Java / XML

  • Olivier says:

    Other JAXB Solution :

    InputStream xmlStream = new FileInputStream(new File(".../file1.xml"));
    ClassA result = JAXB.unmarshal(xmlStream, ClassA.class);
    xmlStream.close();
    

Leave a Reply

Your email address will not be published. Required fields are marked *