public static class SkipEmptyCollectionConverter extends CollectionConverter implements ConditionalConverter {
public SkipEmptyCollectionConverter(Mapper mapper) {
super(mapper);
}
public boolean shouldConvert(Class type, Object value) {
return (value != null && ((Collection) value).size() != 0);
}
}
public static class SkipEmptyMapConverter extends MapConverter implements ConditionalConverter {
public SkipEmptyMapConverter(Mapper mapper) {
super(mapper);
}
public boolean shouldConvert(Class type, Object value) {
return (value != null && ((Map) value).size() != 0);
}
}
public static class SkipEmptyStringConverter extends StringConverter {
public boolean shouldConvert(Class type, Object value) {
return (value != null && ((String)value).length() != 0);
}
}
public static class Contact extends StandardObject {
public String name;
public String company;
public List emailAddresses = new ArrayList();
public Map addresses = new HashMap();
public Map telephone = new HashMap();
public String notes;
public Contact(String name) {
this.name = name;
}
}
public void testSkipNonSimpleTypes() {
List addressBook = new ArrayList();
Contact wallace = new Contact("Wallace");
wallace.company = "Window Washing Inventors, Inc.";
wallace.addresses.put("home", "62 West Wallaby Street");
addressBook.add(wallace);
Contact gromit = new Contact("Gromit");
gromit.emailAddresses.add("gromit@genious-k9s.net");
addressBook.add(gromit);
Contact jenny = new Contact("Jenny");
jenny.telephone.put("home", "867-5309");
jenny.notes = "Found this number on the bathroom wall.";
addressBook.add(jenny);
xstream.alias("contact", Contact.class);
xstream.registerConverter(new SkipEmptyCollectionConverter(xstream.getMapper()));
xstream.registerConverter(new SkipEmptyMapConverter(xstream.getMapper()));
xstream.registerConverter(new SkipEmptyStringConverter());
String expectedXml = ""+
"<list>\n" +
" <contact>\n" +
" <name>Wallace</name>\n" +
" <company>Window Washing Inventors, Inc.</company>\n" +
" <addresses>\n" +
" <entry>\n" +
" <string>home</string>\n" +
" <string>62 West Wallaby Street</string>\n" +
" </entry>\n" +
" </addresses>\n" +
" </contact>\n" +
" <contact>\n" +
" <name>Gromit</name>\n" +
" <emailAddresses>\n" +
" <string>gromit@genious-k9s.net</string>\n" +
" </emailAddresses>\n" +
" </contact>\n" +
" <contact>\n" +
" <name>Jenny</name>\n" +
" <telephone>\n" +
" <entry>\n" +
" <string>home</string>\n" +
" <string>867-5309</string>\n" +
" </entry>\n" +
" </telephone>\n" +
" <notes>Found this number on the bathroom wall.</notes>\n" +
" </contact>\n" +
"</list>";
assertBothWays(addressBook, expectedXml);
}