package com.levelup.java.xml;
import static org.hamcrest.Matchers.hasKey;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.util.Map;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Maps;
import com.thoughtworks.xstream.XStream;
/**
* This java example will demonstrate converting xml to map with xstream.
*
* @author Justin Musgrove
* @see <a href=
* 'http://www.leveluplunch.com/java/examples/convert-xml-to-from-hashmap-object-xstream/'>Conver
* t xml to hashmap using xstream</a>
*/
public class XMLToMapXstream {
private static final Logger logger = Logger
.getLogger(XMLToMapXstream.class);
public class Restaurant {
private Integer id;
private String name;
private String address;
public Restaurant(Integer id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
Map<Integer, Restaurant> restaurantByKey;
@Before
public void setUp() {
Restaurant resturant = new Restaurant(1, "Woodlawn super club",
"Fort Atkinson");
Restaurant resturant2 = new Restaurant(2, "Sammy's", "Fort Atkinson");
Restaurant resturant3 = new Restaurant(3, "ColdSpring Inn",
"Cold Spring");
restaurantByKey = Maps.newHashMap();
restaurantByKey.put(1, resturant);
restaurantByKey.put(2, resturant2);
restaurantByKey.put(3, resturant3);
}
@Test
public void serialize_map_to_xml() {
XStream xStream = new XStream();
xStream.alias("map", java.util.Map.class);
String xml = xStream.toXML(restaurantByKey);
logger.info(xml);
assertNotNull(xml);
}
@Test
public void deserialize_xml_to_hashmap() {
String xmlAsMap = "<map>\n <entry>\n <int>1</int>\n <com.levelup.java.xml.XMLToMapXstream_-Restaurant>\n <id>1</id>\n <name>Woodlawn super club</name>\n <address>Fort Atkinson</address>\n <outer-class>\n <restaurantByKey reference=\"../../../..\"/>\n </outer-class>\n </com.levelup.java.xml.XMLToMapXstream_-Restaurant>\n </entry>\n <entry>\n <int>2</int>\n <com.levelup.java.xml.XMLToMapXstream_-Restaurant>\n <id>2</id>\n <name>Sammy's</name>\n <address>Fort Atkinson</address>\n <outer-class reference=\"../../../entry/com.levelup.java.xml.XMLToMapXstream_-Restaurant/outer-class\"/>\n </com.levelup.java.xml.XMLToMapXstream_-Restaurant>\n </entry>\n <entry>\n <int>3</int>\n <com.levelup.java.xml.XMLToMapXstream_-Restaurant>\n <id>3</id>\n <name>ColdSpring Inn</name>\n <address>Cold Spring</address>\n <outer-class reference=\"../../../entry/com.levelup.java.xml.XMLToMapXstream_-Restaurant/outer-class\"/>\n </com.levelup.java.xml.XMLToMapXstream_-Restaurant>\n </entry>\n</map>\n";
XStream xStream = new XStream();
xStream.alias("map", java.util.Map.class);
@SuppressWarnings("unchecked")
Map<Integer, Restaurant> resturantConverted = (Map<Integer, Restaurant>) xStream
.fromXML(xmlAsMap);
assertThat(resturantConverted, hasKey(new Integer("1")));
}
}