Sample XML.
<person>
<name>Joe Dirt</name>
<ssn>123-45-6789</ssn>
<dob>07/04/1981</dob>
</person>
Sample Java Class
public class Person(){
private String name;
private String ssn;
private java.util.Date dob;
.....
}
Sample Digester rules
<?xml version="1.0"?>
<digester-rules>
<pattern value="message">
<object-create-rule classname="Person" />
<bean-property-setter-rule pattern="name" propertyname="name" />
<bean-property-setter-rule pattern="ssn" propertyname="ssn" />
<bean-property-setter-rule pattern="dob" propertyname="dob" />
</pattern>
</digester-rules>
Should be able to register a DateConverter, and all should work:
import org.apache.commons.beanutils.Converter;
class MyDateConverter implements Converter {
@Override
public Object convert(Class clazz, Object value) {
if (clazz.equals(Date.class)) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
return sdf.parse((String) value);
} catch (ParseException pe) {
throw new IllegalArgumentException(pe);
} catch (ClassCastException cce) {
throw new IllegalArgumentException(cce);
}
} else {
throw new IllegalArgumentException("Expected Date class");
}
}
}
......
import org.apache.commons.beanutils.ConvertUtils;
@Test
public void testXmlRules() throws Exception {
ConvertUtils.register(new MyDateConverter(), Date.class);
Digester digester = DigesterLoader.createDigester(new InputSource(this
.getClass().getResourceAsStream("rules.xml")));
Person person = (Person) digester.parse(this.getClass()
.getResourceAsStream("person.xml"));
Assert.assertEquals("Joe Dirt", person.getName());
Assert.assertEquals("123-45-6789", person.getSsn());
Assert.assertEquals(new SimpleDateFormat("dd/MM/yyyy")
.parse("07/04/1981"), person.getDob());
}