In the earlier tutorials we saw how to convert a Java object to XML and back, custom converter and basic converters. In this tutorial we look at how XStream converts array and collections from java to xml and vice versa. We will convert the following types :
- String[]
- char[]
- List<String>
- java.util.Properties
- List<String>
- Map<String, String>
- TreeMap<String, String> treeMap
- TreeSet<String> treeSet
- enum
- EnumMap<testEnum, String> testEnum is an enum
- EnumSet<testEnum> testEnum is an enum
Here’s the complete example
package com.studytrails.xml.xstream; import java.util.ArrayList; import java.util.Collections; import java.util.EnumMap; import java.util.EnumSet; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.TreeMap; import java.util.TreeSet; import com.thoughtworks.xstream.XStream; public class ConverterExample2 { public static void main(String[] args) { ConverterExample2 example2 = new ConverterExample2(); example2.runExample(); } public void runExample() { XStream xStream = new XStream(); CollectionConverterExample classContainingCollection = new CollectionConverterExample(); classContainingCollection.initialize(); String xml = xStream.toXML(classContainingCollection); System.out.println(xml); } } class CollectionConverterExample { String[] stringArray = new String[] { "StringA", "StringB", "StringC" }; char[] charArray = new char[] { 'a', 'b', 'c', 'd', 'e' }; List<String> listA = new ArrayList<String>(); Map<String, String> mapA = new HashMap<String, String>(); Properties properties = new Properties(); List<String> singletonList; Map<String, String> singletonMap; TreeMap<String, String> treeMap = new TreeMap<String, String>(); TreeSet<String> treeSet = new TreeSet<String>(); enum testEnum {testA, testB} testEnum testeEnumValue = testEnum.testA; EnumMap<testEnum, String> testEnumMap = new EnumMap<CollectionConverterExample.testEnum, String>(testEnum.class); EnumSet<testEnum> testEnumSet = EnumSet.range(testEnum.testA, testEnum.testB); public void initialize() { listA.add("testA"); mapA.put("keyA", "ValueA"); properties.put("propertyA", "valueA"); treeMap.put("treeA", "valueA"); treeMap.put("treeB", "valueB"); treeSet.add("treeB"); treeSet.add("treeA"); singletonList = Collections.singletonList("singletonListA"); singletonMap = Collections.singletonMap("key1", "value1"); testEnumMap.put(testEnum.testA, "testEnumMapValue1"); testEnumMap.put(testEnum.testB, "testEnumMapValue2"); } }
The resultant XML looks like this
StringA StringB StringC abcde testA keyA ValueA singletonListA key1 value1 treeA valueA treeB valueB treeA treeB