Reputation: 421
I'm using the Apache Digester to parse an XML like the below and I've written the below code to parse it. The parsing it seems is ok (I put in debug points on the setter methods for the KSO attributes) , however the object for KSO code doesn't get added in my Header bean. What would I need to do to have the Kso bean added in the Header bean ?
Sample XML -
<lineups country="USA">
<header headerId="IN67397">
<name>Great Western</name>
<kso ksoId="17758">GW Media</kso>
</header>
</lineups>
Below is what I have created in the digester :
Digester digester = new Digester();
digester.setValidating(false);
digester.push(new Headers()); // There will be multiple
digester.addObjectCreate("gn/lineups/header",
"com.sample.model.header.Header");
digester.addSetProperties("gn/lineups/header"); // Id
digester.addSetProperties("gn/lineups/header/name");
digester.addCallMethod("gn/lineups/header/name", "setName", 0);
// KSO Code
digester.addObjectCreate("gn/lineups/headend/kso",
"com.sample.model.header.Kso");
digester.addSetProperties("gn/lineups/headend/kso"); //sets the ksoId
digester.addCallMethod("gn/lineups/headend/kso", "setName", 0);
public class Header
{
private String headerId;
private String name;
private Kso kso;
// getter setters are in place
}
Kso Class -
public class Kso
{
private String ksoId;
private String name;
// getter setters are in place
}
Upvotes: 1
Views: 123
Reputation: 2836
Couple of changes made it work for me:
new Headers()
is - I shoved a list in there.headend
with header
.setNextRule
to add the newly created
object to its parent.Which leaves:
Digester digester = new Digester();
digester.setValidating(false);
digester.push(new ArrayList<Header>()); // There will be multiple
digester.addObjectCreate("gn/lineups/header", Header.class);
digester.addSetProperties("gn/lineups/header"); // Id
digester.addSetProperties("gn/lineups/header/name");
digester.addCallMethod("gn/lineups/header/name", "setName", 0);
digester.addSetNext("gn/lineups/header", "add");
digester.addObjectCreate("gn/lineups/header/kso", Kso.class);
digester.addSetProperties("gn/lineups/header/kso"); //sets the ksoId
digester.addCallMethod("gn/lineups/header/kso", "setName", 0);
digester.addSetNext("gn/lineups/header/kso", "setKso");
HTH
Upvotes: 0