XStream – Converters

XStream – Converters ”; Previous Next XStream converters are the key components of the XStream library, which are responsible to convert an object to XML and vice versa. XStream provides numerous converters for common types such as primitives, String, File, Collections, arrays, and Dates. Using Converter Let us use a SingleValueConvertor whose purpose is to convert an object into a single string. We will use SingleValueConvertor to write an object as attribute string. Create a Converter class NameConverter implements SingleValueConverter { public Object fromString(String name) { String[] nameparts = name.split(“,”); return new Name(nameparts[0], nameparts[1]); } public String toString(Object name) { return ((Name)name).getFirstName() + “,” + ((Name)name).getLastName(); } public boolean canConvert(Class type) { return type.equals(Name.class); } } Register a Converter xstream.registerConverter(new NameConverter()); Example without Converter Let us first test the code without converter in XStream. Create a java class file named XStreamTester in C:>XStream_WORKSPACEcomtutorialspointxstream. File: XStreamTester.java package com.tutorialspoint.xstream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.io.xml.StaxDriver; public class XStreamTester { public static void main(String args[]) { XStreamTester tester = new XStreamTester(); XStream xstream = new XStream(new StaxDriver()); Student student = tester.getStudentDetails(); xstream.autodetectAnnotations(true); //Object to XML Conversion String xml = xstream.toXML(student); System.out.println(formatXml(xml)); } private Student getStudentDetails() { Student student = new Student(“Mahesh”,”Parashar”); return student; } public static String formatXml(String xml) { try { Transformer serializer = SAXTransformerFactory.newInstance().newTransformer(); serializer.setOutputProperty(OutputKeys.INDENT, “yes”); serializer.setOutputProperty(“{http://xml.apache.org/xslt}indent-amount”, “2”); Source xmlSource = new SAXSource(new InputSource( new ByteArrayInputStream(xml.getBytes()))); StreamResult res = new StreamResult(new ByteArrayOutputStream()); serializer.transform(xmlSource, res); return new String(((ByteArrayOutputStream)res.getOutputStream()).toByteArray()); } catch(Exception e) { return xml; } } } @XStreamAlias(“student”) class Student { @XStreamAlias(“name”) @XStreamAsAttribute private Name studentName; public Student(String firstName, String lastName) { this.studentName = new Name(firstName, lastName); } public Name getName() { return studentName; } } class Name { private String firstName; private String lastName; public Name(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } } Verify the Result Compile the classes using javac compiler as follows − C:XStream_WORKSPACEcomtutorialspointxstream>javac XStreamTester.java Now run the XStreamTester to see the result − C:XStream_WORKSPACEcomtutorialspointxstream>java XStreamTester Verify the output as follows − <?xml version = “1.0” encoding = “UTF-8”?> <student> <name> <firstName>Mahesh</firstName> <lastName>Parashar</lastName> </name> </student> Example with Converter Let us now test the code with converter in XStream. Create a java class file named XStreamTester in C:>XStream_WORKSPACEcomtutorialspointxstream. File: XStreamTester.java package com.tutorialspoint.xstream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.converters.SingleValueConverter; import com.thoughtworks.xstream.io.xml.StaxDriver; public class XStreamTester { public static void main(String args[]) { XStreamTester tester = new XStreamTester(); XStream xstream = new XStream(new StaxDriver()); Student student = tester.getStudentDetails(); xstream.autodetectAnnotations(true); xstream.registerConverter(new NameConverter()); //Object to XML Conversion String xml = xstream.toXML(student); System.out.println(formatXml(xml)); } private Student getStudentDetails() { Student student = new Student(“Mahesh”,”Parashar”); return student; } public static String formatXml(String xml) { try { Transformer serializer = SAXTransformerFactory.newInstance().newTransformer(); serializer.setOutputProperty(OutputKeys.INDENT, “yes”); serializer.setOutputProperty(“{http://xml.apache.org/xslt}indent-amount”, “2”); Source xmlSource = new SAXSource(new InputSource( new ByteArrayInputStream(xml.getBytes()))); StreamResult res = new StreamResult(new ByteArrayOutputStream()); serializer.transform(xmlSource, res); return new String(((ByteArrayOutputStream)res.getOutputStream()).toByteArray()); } catch(Exception e) { return xml; } } } @XStreamAlias(“student”) class Student { @XStreamAlias(“name”) @XStreamAsAttribute private Name studentName; public Student(String firstName, String lastName) { this.studentName = new Name(firstName, lastName); } public Name getName() { return studentName; } } class Name { private String firstName; private String lastName; public Name(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } } class NameConverter implements SingleValueConverter { public Object fromString(String name) { String[] nameparts = name.split(“,”); return new Name(nameparts[0], nameparts[1]); } public String toString(Object name) { return ((Name)name).getFirstName() + “,” + ((Name)name).getLastName(); } public boolean canConvert(Class type) { return type.equals(Name.class); } } Verify the Result Compile the classes using javac compiler as follows − C:XStream_WORKSPACEcomtutorialspointxstream>javac XStreamTester.java Now run the XStreamTester to see the result − C:XStream_WORKSPACEcomtutorialspointxstream>java XStreamTester Verify the output as follows − <?xml version = “1.0” encoding = “UTF-8”?> <student name = “Mahesh,Parashar”/> Custom Converter Print Page Previous Next Advertisements ”;

XStream – Quick Guide

Xstream – Quick Guide ”; Previous Next XStream – Overview XStream is a simple Java-based library to serialize Java objects to XML and vice versa. Features Easy to use − XStream API provides a high-level facade to simplify common use cases. No need to create mapping − XStream API provides default mapping for most of the objects to be serialized. Performance − XStream is fast and is of low memory footprint, which is suitable for large object graphs or systems. Clean XML − XStream produces clean and compact XML output that is easy to read. Object modification not required − XStream serializes internal fields like private and final fields, and supports non-public and inner classes. Default constructor is not a mandatory requirement. Full object graph support − XStream allows to maintain duplicate references encountered in the object-model and also supports circular references. Customizable conversion strategies − Custom strategies can be registered in order to allow customization of a particular type to be represented as XML. Security framework − XStream provides a fair control over unmarshalled types to prevent security issues with manipulated input. Error messages − When an exception occurs due to malformed XML, it provides detailed diagnostics to fix the problem. Alternative output format − XStream supports other output formats like JSON and morphing. Common Uses Transport − XML is a text representation of object and can be used to transport objects over the wire independent of the serialization / deserialization techniques used. Persistence − Objects can be persisted as XML in databases and can be marshalled/unmarshalled as and when required. Configuration − XML is self-explanatory and is heavily used to define configurations. Objects can also be used for configuration purpose after converting them to XML representation. Unit Tests − XStream API is JUnit compatible and can be used to enhance unit testing of application modules. XStream – Environment Setup In this chapter, we will discuss on the different aspects of setting up a congenial environment for Java. Local Environment Setup If you want to set up your environment for Java programming language, then this section explains how to download and set up Java on your machine. Please follow the steps given below to set up you Java environment. Java SE can be downloaded for free from the link − Download Java. Follow the instructions to download Java and run the .exe to install Java on your machine. Once you have installed Java on your machine, you would need to set the environment variables to point to correct installation directories − Setting Up the Path for Windows 2000/XP Assuming you have installed Java in c:Program Filesjavajdk directory − Right-click on ”My Computer” and select ”Properties”. Click the ”Environment variables” button under the ”Advanced” tab. Alter the ”Path” variable so that it also contains the path to the Java executable. For example, if the path is currently set to ”C:WINDOWSSYSTEM32”, then change your path to read ”C:WINDOWSSYSTEM32;c:Program Filesjavajdkbin”. Setting Up the Path for Windows 95/98/ME Assuming you have installed Java in c:Program Filesjavajdk directory − Edit the ”C:autoexec.bat” file and add the following line at the end − ”SET PATH = %PATH%;C:Program Filesjavajdkbin” Setting Up the Path for Linux, UNIX, Solaris, FreeBSD Environment variable PATH should be set to point to where the Java binaries have been installed. Refer to your shell documentation if you have trouble doing this. For example, if you use bash as your shell, then you would add the following line at the end of your ”.bashrc: export PATH=/path/to/java:$PATH” Popular Java Editors To write Java programs, you will need a text editor. There are even more sophisticated IDEs available in the market. But for now, you can consider one of the following − Notepad − On Windows, you can use any simple text editor like Notepad (Recommended for this tutorial) or TextPad. Netbeans − It is a Java IDE that is free and can be downloaded from https://www.netbeans.org/index.html. Eclipse − It is also a Java IDE developed by the eclipse open-source community and can be downloaded from https://www.eclipse.org/. Download XStream Archive Download the latest version of XStream jar file from XStream download page. At the time of writing this tutorial, we have downloaded xstream-1.4.18.jar and copied it into C:>XStream folder. OS Archive name Windows xstream-1.4.18.jar Linux xstream-1.4.18.jar Mac xstream-1.4.18.jar Set XStream Environment Set the XStream_HOME environment variable to point to the base directory location where xstream jar is stored on your machine. The following table shows how to set the XStream environment on Windows, Linux, and Mac, assuming we”ve extracted xstream-1.4.18.jar in the XStream folder. Sr.No. OS & Description 1 Windows Set the environment variable XStream_HOME to C:XStream 2 Linux export XStream_HOME=/usr/local/XStream 3 Mac export XStream_HOME=/Library/XStream Set CLASSPATH Variable Set the CLASSPATH environment variable to point to the XStream jar location. The following table shows how to set the CLASSPATH variable on Windows, Linux, and Mac system, assuming we”ve stored xstream-1.4.18.jar in the XStream folder. Sr.No. OS & Description 1 Windows Set the environment variable CLASSPATH to %CLASSPATH%;%XStream_HOME%xstream-1.4.18.jar; 2 Linux export CLASSPATH=$CLASSPATH:$XStream_HOME/xstream-1.4.18.jar; 3 Mac export CLASSPATH=$CLASSPATH:$XStream_HOME/xstream-1.4.18.jar; XStream – First Application Before going into the details of the XStream library, let us see an application in action. In this example, we”ve created Student and Address classes. We will create a

XStream – Environment Setup

Xstream – Environment ”; Previous Next In this chapter, we will discuss on the different aspects of setting up a congenial environment for Java. Local Environment Setup If you want to set up your environment for Java programming language, then this section explains how to download and set up Java on your machine. Please follow the steps given below to set up you Java environment. Java SE can be downloaded for free from the link − Download Java. Follow the instructions to download Java and run the .exe to install Java on your machine. Once you have installed Java on your machine, you would need to set the environment variables to point to correct installation directories − Setting Up the Path for Windows 2000/XP Assuming you have installed Java in c:Program Filesjavajdk directory − Right-click on ”My Computer” and select ”Properties”. Click the ”Environment variables” button under the ”Advanced” tab. Alter the ”Path” variable so that it also contains the path to the Java executable. For example, if the path is currently set to ”C:WINDOWSSYSTEM32”, then change your path to read ”C:WINDOWSSYSTEM32;c:Program Filesjavajdkbin”. Setting Up the Path for Windows 95/98/ME Assuming you have installed Java in c:Program Filesjavajdk directory − Edit the ”C:autoexec.bat” file and add the following line at the end − ”SET PATH = %PATH%;C:Program Filesjavajdkbin” Setting Up the Path for Linux, UNIX, Solaris, FreeBSD Environment variable PATH should be set to point to where the Java binaries have been installed. Refer to your shell documentation if you have trouble doing this. For example, if you use bash as your shell, then you would add the following line at the end of your ”.bashrc: export PATH=/path/to/java:$PATH” Popular Java Editors To write Java programs, you will need a text editor. There are even more sophisticated IDEs available in the market. But for now, you can consider one of the following − Notepad − On Windows, you can use any simple text editor like Notepad (Recommended for this tutorial) or TextPad. Netbeans − It is a Java IDE that is free and can be downloaded from https://www.netbeans.org/index.html. Eclipse − It is also a Java IDE developed by the eclipse open-source community and can be downloaded from https://www.eclipse.org/. Download XStream Archive Download the latest version of XStream jar file from XStream download page. At the time of writing this tutorial, we have downloaded xstream-1.4.18.jar and copied it into C:>XStream folder. OS Archive name Windows xstream-1.4.18.jar Linux xstream-1.4.18.jar Mac xstream-1.4.18.jar Set XStream Environment Set the XStream_HOME environment variable to point to the base directory location where xstream jar is stored on your machine. The following table shows how to set the XStream environment on Windows, Linux, and Mac, assuming we”ve extracted xstream-1.4.18.jar in the XStream folder. Sr.No. OS & Description 1 Windows Set the environment variable XStream_HOME to C:XStream 2 Linux export XStream_HOME=/usr/local/XStream 3 Mac export XStream_HOME=/Library/XStream Set CLASSPATH Variable Set the CLASSPATH environment variable to point to the XStream jar location. The following table shows how to set the CLASSPATH variable on Windows, Linux, and Mac system, assuming we”ve stored xstream-1.4.18.jar in the XStream folder. Sr.No. OS & Description 1 Windows Set the environment variable CLASSPATH to %CLASSPATH%;%XStream_HOME%xstream-1.4.18.jar; 2 Linux export CLASSPATH=$CLASSPATH:$XStream_HOME/xstream-1.4.18.jar; 3 Mac export CLASSPATH=$CLASSPATH:$XStream_HOME/xstream-1.4.18.jar; Print Page Previous Next Advertisements ”;

XStream – Aliasing

XStream – Aliasing ”; Previous Next Aliasing is a technique to customize the generated XML or to use a particular formatted XML using XStream. Let’s suppose the following XML format is to be used to serialize/de-serialize the Student object. <student name = “Suresh”> <note> <title>first</title> <description>My first assignment.</description> </note> <note> <title>second</title> <description>My second assignment.</description> </note> </student> Based on the above XML format, let”s create model classes. class Student { private String studentName; private List<Note> notes = new ArrayList<Note>(); public Student(String name) { this.studentName = name; } public void addNote(Note note) { notes.add(note); } public String getName() { return studentName; } public List<Note> getNotes() { return notes; } } class Note { private String title; private String description; public Note(String title, String description) { this.title = title; this.description = description; } public String getTitle() { return title; } public String getDescription() { return description; } } Let”s test the above objects serialization using XStream. Create a java class file named XStreamTester in C:>XStream_WORKSPACEcomtutorialspointxstream. File: XStreamTester.java package com.tutorialspoint.xstream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.StaxDriver; public class XStreamTester { public static void main(String args[]) { XStreamTester tester = new XStreamTester(); XStream xstream = new XStream(new StaxDriver()); Student student = tester.getStudentDetails(); //Object to XML Conversion String xml = xstream.toXML(student); System.out.println(formatXml(xml)); } private Student getStudentDetails() { Student student = new Student(“Mahesh”); student.addNote(new Note(“first”,”My first assignment.”)); student.addNote(new Note(“second”,”My Second assignment.”)); return student; } public static String formatXml(String xml) { try { Transformer serializer = SAXTransformerFactory.newInstance().newTransformer(); serializer.setOutputProperty(OutputKeys.INDENT, “yes”); serializer.setOutputProperty(“{http://xml.apache.org/xslt}indent-amount”, “2”); Source xmlSource = new SAXSource(new InputSource( new ByteArrayInputStream(xml.getBytes()))); StreamResult res = new StreamResult(new ByteArrayOutputStream()); serializer.transform(xmlSource, res); return new String(((ByteArrayOutputStream)res.getOutputStream()).toByteArray()); } catch(Exception e) { return xml; } } } class Student { private String studentName; private List<Note> notes = new ArrayList<Note>(); public Student(String name) { this.studentName = name; } public void addNote(Note note) { notes.add(note); } public String getName() { return studentName; } public List<Note> getNotes() { return notes; } } class Note { private String title; private String description; public Note(String title, String description) { this.title = title; this.description = description; } public String getTitle() { return title; } public String getDescription() { return description; } } Verify the Result Compile the classes using javac compiler as follows − C:XStream_WORKSPACEcomtutorialspointxstream>javac XStreamTester.java Now run the XStreamTester to see the result − C:XStream_WORKSPACEcomtutorialspointxstream>java XStreamTester Verify the output as follows − <?xml version = “1.0” encoding = “UTF-8″?> <com.tutorialspoint.xstream.Student> <studentName>Mahesh</studentName> <notes> <com.tutorialspoint.xstream.Note> <title>first</title> <description>My first assignment.</description> </com.tutorialspoint.xstream.Note> <com.tutorialspoint.xstream.Note> <title>second</title> <description>My Second assignment.</description> </com.tutorialspoint.xstream.Note> </notes> </com.tutorialspoint.xstream.Student> In the above result, the Student object name is fully qualified. To replace it as student tag, follow the next section. Class Aliasing Field Aliasing Implicit Collections Aliasing Attribute Aliasing Package Aliasing Print Page Previous Next Advertisements ”;

XStream – Useful Resources

XStream – Useful Resources ”; Previous Next The following resources contain additional information on XStream. Please use them to get more in-depth knowledge on this topic. Useful Links on XStream XStream Wiki – Wikipedia reference for XStream library. Useful Books on XStream To enlist your site on this page, please drop an email to [email protected] Print Page Previous Next Advertisements ”;

XStream – Annotations

XStream – Annotations ”; Previous Next XStream supports annotations similarly like automatic configuration instead of coding. In the previous chapter, we”ve seen the following configurations in code. xstream.alias(“student”, Student.class); xstream.alias(“note”, Note.class); xstream.useAttributeFor(Student.class, “studentName”); xstream.aliasField(“name”, Student.class, “studentName”); xstream.addImplicitCollection(Student.class, “notes”); The following code snippet illustrates the use of annotations to do the same work in a much easier way. @XStreamAlias(“student”) //define class level alias class Student { @XStreamAlias(“name”) //define field level alias @XStreamAsAttribute //define field as attribute private String studentName; @XStreamImplicit //define list as an implicit collection private List<Note> notes = new ArrayList<Note>(); @XStreamOmitField //omit a field to not to be a part of XML private int type; } Let us test the above annotation using XStream. Create a java class file named XStreamTester in C:>XStream_WORKSPACEcomtutorialspointxstream. File: XStreamTester.java package com.tutorialspoint.xstream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamImplicit; import com.thoughtworks.xstream.annotations.XStreamOmitField; import com.thoughtworks.xstream.io.xml.StaxDriver; public class XStreamTester { public static void main(String args[]) { XStreamTester tester = new XStreamTester(); XStream xstream = new XStream(new StaxDriver()); Student student = tester.getStudentDetails(); xstream.processAnnotations(Student.class); //Object to XML Conversion String xml = xstream.toXML(student); System.out.println(formatXml(xml)); } private Student getStudentDetails() { Student student = new Student(“Mahesh”); student.addNote(new Note(“first”,”My first assignment.”)); student.addNote(new Note(“second”,”My Second assignment.”)); student.setType(1); return student; } public static String formatXml(String xml) { try { Transformer serializer = SAXTransformerFactory.newInstance().newTransformer(); serializer.setOutputProperty(OutputKeys.INDENT, “yes”); serializer.setOutputProperty(“{http://xml.apache.org/xslt}indent-amount”, “2”); Source xmlSource = new SAXSource(new InputSource( new ByteArrayInputStream(xml.getBytes()))); StreamResult res = new StreamResult(new ByteArrayOutputStream()); serializer.transform(xmlSource, res); return new String(((ByteArrayOutputStream)res.getOutputStream()).toByteArray()); } catch(Exception e) { return xml; } } } @XStreamAlias(“student”) class Student { @XStreamAlias(“name”) @XStreamAsAttribute private String studentName; @XStreamImplicit private List<Note> notes = new ArrayList<Note>(); public Student(String name) { this.studentName = name; } public void addNote(Note note) { notes.add(note); } public String getName() { return studentName; } public List<Note> getNotes() { return notes; } @XStreamOmitField private int type; public int getType() { return type; } public void setType(int type) { this.type = type; } } @XStreamAlias(“note”) class Note { private String title; private String description; public Note(String title, String description) { this.title = title; this.description = description; } public String getTitle() { return title; } public String getDescription() { return description; } } Verify the Result Compile the classes using javac compiler as follows − C:XStream_WORKSPACEcomtutorialspointxstream>javac XStreamTester.java Now run the XStreamTester to see the result − C:XStream_WORKSPACEcomtutorialspointxstream>java XStreamTester Verify the output as follows − <?xml version = “1.0” encoding = “UTF-8”?> <student name = “Mahesh”> <note> <title>first</title> <description>My first assignment.</description> </note> <note> <title>second</title> <description>My Second assignment.</description> </note> </student> In order to instruct the XStream framework to process annotation, you need to add the following command before serializing xml. xstream.processAnnotations(Student.class); Or xstream.autodetectAnnotations(true); Print Page Previous Next Advertisements ”;

XStream – Overview

XStream – Overview ”; Previous Next XStream is a simple Java-based library to serialize Java objects to XML and vice versa. Features Easy to use − XStream API provides a high-level facade to simplify common use cases. No need to create mapping − XStream API provides default mapping for most of the objects to be serialized. Performance − XStream is fast and is of low memory footprint, which is suitable for large object graphs or systems. Clean XML − XStream produces clean and compact XML output that is easy to read. Object modification not required − XStream serializes internal fields like private and final fields, and supports non-public and inner classes. Default constructor is not a mandatory requirement. Full object graph support − XStream allows to maintain duplicate references encountered in the object-model and also supports circular references. Customizable conversion strategies − Custom strategies can be registered in order to allow customization of a particular type to be represented as XML. Security framework − XStream provides a fair control over unmarshalled types to prevent security issues with manipulated input. Error messages − When an exception occurs due to malformed XML, it provides detailed diagnostics to fix the problem. Alternative output format − XStream supports other output formats like JSON and morphing. Common Uses Transport − XML is a text representation of object and can be used to transport objects over the wire independent of the serialization / deserialization techniques used. Persistence − Objects can be persisted as XML in databases and can be marshalled/unmarshalled as and when required. Configuration − XML is self-explanatory and is heavily used to define configurations. Objects can also be used for configuration purpose after converting them to XML representation. Unit Tests − XStream API is JUnit compatible and can be used to enhance unit testing of application modules. Print Page Previous Next Advertisements ”;

XStream – Home

XStream Tutorial PDF Version Quick Guide Resources Job Search Discussion XStream is a simple Java-based library to serialize Java objects to XML and vice versa. This is a brief tutorial that adopts a simple and intuitive way to explain the basic features of XStream library and how to use them. Audience This tutorial has been prepared to suit the requirements of Java developers who would like to understand the basics of XStream library and use it in their Java programs. Prerequisites Since XStream is a Java-based library, you need to have a clear understanding of Java programming in order to make use of this library. Print Page Previous Next Advertisements ”;

XStream – Object Streams

XStream – Object Streams ”; Previous Next XStream provides alternative implementations of java.io.ObjectInputStream and java.io.ObjectOutputStream so that streams of objects can be serialized or deserialized from XML. This is particularly useful when large sets of objects are to be processed, keeping one object in memory at a time. Syntax: createObjectOutputStream() ObjectOutputStream objectOutputStream = xstream.createObjectOutputStream( new FileOutputStream(“test.txt”)); Syntax: createObjectInputStream() ObjectInputStream objectInputStream = xstream.createObjectInputStream( new FileInputStream(“test.txt”)); Let us now test the code with object streams in XStream. Create a java class file named XStreamTester in C:>XStream_WORKSPACEcomtutorialspointxstream. File: XStreamTester.java package com.tutorialspoint.xstream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.io.xml.StaxDriver; public class XStreamTester { public static void main(String args[]) { XStreamTester tester = new XStreamTester(); XStream xstream = new XStream(new StaxDriver()); xstream.autodetectAnnotations(true); Student student1 = new Student(“Mahesh”,”Parashar”); Student student2 = new Student(“Suresh”,”Kalra”); Student student3 = new Student(“Ramesh”,”Kumar”); Student student4 = new Student(“Naresh”,”Sharma”); try { ObjectOutputStream objectOutputStream = xstream.createObjectOutputStream( new FileOutputStream(“test.txt”)); objectOutputStream.writeObject(student1); objectOutputStream.writeObject(student2); objectOutputStream.writeObject(student3); objectOutputStream.writeObject(student4); objectOutputStream.writeObject(“Hello World”); objectOutputStream.close(); ObjectInputStream objectInputStream = xstream.createObjectInputStream( new FileInputStream(“test.txt”)); Student student5 = (Student)objectInputStream.readObject(); Student student6 = (Student)objectInputStream.readObject(); Student student7 = (Student)objectInputStream.readObject(); Student student8 = (Student)objectInputStream.readObject(); String text = (String)objectInputStream.readObject(); System.out.println(student5); System.out.println(student6); System.out.println(student7); System.out.println(student8); System.out.println(text); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } @XStreamAlias(“student”) class Student { private String firstName; private String lastName; public Student(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public String toString() { return “Student [ firstName: “+firstName+”, lastName: “+ lastName+ ” ]”; } } Verify the Result Compile the classes using javac compiler as follows − C:XStream_WORKSPACEcomtutorialspointxstream>javac XStreamTester.java Now run the XStreamTester to see the result − C:XStream_WORKSPACEcomtutorialspointxstream>java XStreamTester Verify the output as follows − Student [ firstName: Mahesh, lastName: Parashar ] Student [ firstName: Suresh, lastName: Kalra ] Student [ firstName: Ramesh, lastName: Kumar ] Student [ firstName: Naresh, lastName: Sharma ] Hello World Look at the content of the test.txt present at C:>XStream_WORKSPACEcomtutorialspointxstream folder. <?xml version = “1.0” ?> <object-stream> <student> <firstName>Mahesh</firstName> <lastName>Parashar</lastName> </student> <student> <firstName>Suresh</firstName> <lastName>Kalra</lastName> </student> <student> <firstName>Ramesh</firstName> <lastName>Kumar</lastName> </student> <student> <firstName>Naresh</firstName> <lastName>Sharma</lastName> </student> <string>Hello World</string> </object-stream> Print Page Previous Next Advertisements ”;

XStream – JSON

XStream – Writing JSON using XStream ”; Previous Next XStream supports JSON by initializing XStream object with an appropriate driver. XStream currently supports JettisonMappedXmlDriver and JsonHierarchicalStreamDriver. Let us now test the code with json handling in XStream. Create a java class file named XStreamTester in C:>XStream_WORKSPACEcomtutorialspointxstream. File: XStreamTester.java package com.tutorialspoint.xstream; import java.io.Writer; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver; import com.thoughtworks.xstream.io.json.JsonWriter; public class XStreamTester { public static void main(String args[]) { XStreamTester tester = new XStreamTester(); XStream xstream = new XStream(new JsonHierarchicalStreamDriver() { public HierarchicalStreamWriter createWriter(Writer writer) { return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); } }); Student student = new Student(“Mahesh”,”Parashar”); xstream.setMode(XStream.NO_REFERENCES); xstream.alias(“student”, Student.class); System.out.println(xstream.toXML(student)); } } @XStreamAlias(“student”) class Student { private String firstName; private String lastName; public Student(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public String toString() { return “Student [ firstName: “+firstName+”, lastName: “+ lastName+ ” ]”; } } Verify the Result Compile the classes using javac compiler as follows − C:XStream_WORKSPACEcomtutorialspointxstream>javac XStreamTester.java Now run the XStreamTester to see the result − C:XStream_WORKSPACEcomtutorialspointxstream>java XStreamTester Verify the output as follows − { “firstName”: “Mahesh”, “lastName”: “Parashar” } Print Page Previous Next Advertisements ”;