Sameervb
Sameervb

Reputation: 421

Digester Parsing not adding bean to the main Bean

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

Answers (1)

Barney
Barney

Reputation: 2836

Couple of changes made it work for me:

  • Not sure what new Headers() is - I shoved a list in there.
  • Looks like a typo in the kso rules - I replaced headend with header.
  • Main point is you need a 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

Related Questions