This test works.
import java.io.*;
import org.xml.sax.*;
import org.junit.*;
import org.apache.commons.digester.*;
import static org.junit.Assert.*;
public class DigesterTest {
@Test
public void testItemBillingDetailsNotNull() throws IOException, SAXException {
Digester d = new Digester();
MyApp.digestItemsDetails(d, "item");
Item item = (Item) d.parse(DigesterTest.class.getResource("/test.xml"));
assertNotNull(item.getBillingDetails());
assertEquals("NONE", item.getBillingDetails().getBillFrequency());
assertEquals("NOT_DEFINED", item.getBillingDetails().getBillingCycle());
}
}
I think you were just missing a call to addSetNext()
:
import org.apache.commons.digester.*;
public class MyApp {
public static void digestItemsDetails(Digester digester, String root) {
String itemTag = root;
digester.addObjectCreate(itemTag, Item.class);
/* snip */
String billingPrefix = itemTag + "/billingDetails";
digester.addObjectCreate(billingPrefix, BillingDetails.class);
digester.addCallMethod(billingPrefix +"/billFrequency", "setBillFrequency", 0);
digester.addCallMethod(billingPrefix +"/billingCycle", "setBillingCycle", 0);
digester.addSetNext(billingPrefix, "setBillingDetails");
/* snip */
}
}