package org.simpleframework.xml.convert; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.simpleframework.xml.Default; import org.simpleframework.xml.DefaultType; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; import org.simpleframework.xml.strategy.CycleStrategy; import org.simpleframework.xml.stream.CamelCaseStyle; import org.simpleframework.xml.stream.Format; import org.simpleframework.xml.stream.InputNode; import org.simpleframework.xml.stream.OutputNode; import org.simpleframework.xml.stream.Style; public class RegistryConverterCycleTest extends TestCase { public static class PersonConverter implements Converter<Person> { private final Serializer serializer; public PersonConverter(Serializer serializer) { this.serializer = serializer; } public Person read(InputNode node) throws Exception { return serializer.read(PersonDelegate.class, node.getNext()); } public void write(OutputNode node, Person value) throws Exception { Person person = new PersonDelegate(value); serializer.write(person, node); } @Root @Default(DefaultType.PROPERTY) private static class PersonDelegate extends Person { public PersonDelegate() { super(); } public PersonDelegate(Person person) { super(person.address, person.name, person.age); } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } } @Root @Default public static class Club { private Address address; private List<Person> members; public Club() { super(); } public Club(Address address) { this.members = new ArrayList<Person>(); this.address = address; } public void addMember(Person person) { this.members.add(person); } } private static class Person { protected Address address; protected String name; protected int age; public Person() { super(); } public Person(Address address, String name, int age) { this.address = address; this.name= name; this.age = age; } } @Root @Default private static class Address { private String address; public Address() { super(); } public Address(String address) { this.address = address; } } public void testCycle() throws Exception { Style style = new CamelCaseStyle(); Format format = new Format(style); Registry registry = new Registry(); Address address = new Address("An Address"); Person person = new Person(address, "Niall", 30); CycleStrategy referencer = new CycleStrategy(); RegistryStrategy strategy = new RegistryStrategy(registry, referencer); Serializer serializer = new Persister(strategy, format); Converter converter = new PersonConverter(serializer); Club club = new Club(address); club.addMember(person); registry.bind(Person.class, converter); serializer.write(club, System.out); } }