package com.opensymphony.xwork2.test.annotations; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; import java.util.Map; public class PersonTypeConverter extends DefaultTypeConverter { @Override public Object convertValue(Map<String, Object> context, Object value, Class toType) { if(value instanceof String) { return decodePerson((String)value); } else if(value instanceof String && value.getClass().isArray()) { return decodePerson(((String[])value)[0]); } else { Person person = (Person)value; return person.getFirstName() + ":" + person.getLastName(); } } private Person decodePerson(String encodedPerson) { String[] parts = ((String)encodedPerson).split(":"); Person person = new Person(); person.setFirstName(parts[0]); person.setLastName(parts[1]); return person; } }