package org.simpleframework.xml.convert; import java.io.StringWriter; import java.util.List; import java.util.Vector; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Namespace; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.Text; import org.simpleframework.xml.ValidationTestCase; import org.simpleframework.xml.convert.ExampleConverters.Chicken; import org.simpleframework.xml.convert.ExampleConverters.ChickenConverter; import org.simpleframework.xml.convert.ExampleConverters.Cow; import org.simpleframework.xml.convert.ExampleConverters.CowConverter; import org.simpleframework.xml.core.Persister; import org.simpleframework.xml.strategy.Strategy; public class AnnotationStrategyTest extends ValidationTestCase { private static final String SOURCE = "<farmExample>"+ " <chicken name='Hen' age='1' legs='2'/>"+ " <cow name='Bull' age='4' legs='4'/>"+ " <farmer age='80'>Old McDonald</farmer>"+ " <time>1</time>"+ "</farmExample>"; @Root private static class Farmer { @Text @Namespace(prefix="man", reference="http://www.domain/com/man") private String name; @Attribute private int age; public Farmer() { super(); } public Farmer(String name, int age) { this.name = name; this.age = age; } } @Root private static class FarmExample { @Element @Namespace(prefix="c", reference="http://www.domain.com/test") @Convert(ChickenConverter.class) private Chicken chicken; @Element @Convert(CowConverter.class) private Cow cow; @Element private Farmer farmer; @ElementList(inline=true, entry="time") @Namespace(prefix="l", reference="http://www.domain.com/list") private List<Integer> list = new Vector<Integer>(); public FarmExample(@Element(name="chicken") Chicken chicken, @Element(name="cow") Cow cow) { this.farmer = new Farmer("Old McDonald", 80); this.chicken = chicken; this.cow = cow; } public List<Integer> getTime() { return list; } public Chicken getChicken() { return chicken; } public Cow getCow() { return cow; } } public void testAnnotationStrategy() throws Exception { Strategy strategy = new AnnotationStrategy(); Serializer serializer = new Persister(strategy); StringWriter writer = new StringWriter(); FarmExample example = serializer.read(FarmExample.class, SOURCE); example.getTime().add(10); example.getTime().add(11); example.getTime().add(12); assertEquals(example.getCow().getName(), "Bull"); assertEquals(example.getCow().getAge(), 4); assertEquals(example.getCow().getLegs(), 4); assertEquals(example.getChicken().getName(), "Hen"); assertEquals(example.getChicken().getAge(), 1); assertEquals(example.getChicken().getLegs(), 2); serializer.write(example, System.out); serializer.write(example, writer); String text = writer.toString(); assertElementExists(text, "/farmExample/chicken"); assertElementExists(text, "/farmExample/cow"); assertElementHasNamespace(text, "/farmExample/chicken", "http://www.domain.com/test"); assertElementDoesNotHaveNamespace(text, "/farmExample/cow", "http://www.domain.com/test"); assertElementHasAttribute(text, "/farmExample/chicken", "name", "Hen"); assertElementHasAttribute(text, "/farmExample/chicken", "age", "1"); assertElementHasAttribute(text, "/farmExample/chicken", "legs", "2"); assertElementHasAttribute(text, "/farmExample/cow", "name", "Bull"); assertElementHasAttribute(text, "/farmExample/cow", "age", "4"); assertElementHasAttribute(text, "/farmExample/cow", "legs", "4"); } }