I'm reposting to fix the typo "public void setgetErrdesc...".  text below is
corrected.  I'm still having the same parsing problem as before.

You know, if I reformat the XML string to look like this:
<loginerr errnum="18"   errdesc=" Your smallcorp site login has expired!!"
/>

...it works fine (I can create my bean using the digester).

The question is why doesn't work for the XML formatted as:
                <loginerr>
                <errnum>18</errnum>
                <errdesc>Your smallcorp site login has expired!!</errdesc>
            </loginerr>

Aren't both xml formats correct?  Are these Digester peculiarities, or SAX?

I have tons of XML I need to parse that have this latter format and am
desperate to make this work!!

Thanks,  Paula Young

                 -----Original Message-----
                From:   Paula Young [mailto:[EMAIL PROTECTED]] 
                Sent:   Thursday, October 04, 2001 1:34 PM
                To:     [EMAIL PROTECTED]
                Subject:        Digester help needed !

                I need some basic DIGESTER help!  I think I'm trying to do
something simple, but it's not working for me and I've tried several things,
etc,etc,etc...  I just want to parse  an XML string that looks like:
                <loginerr>
                <errnum>18</errnum>
                <errdesc>Your smallcorp site login has expired!!</errdesc>
                </loginerr>

                My ErrResp.java bean that should result in the parse looks
like:

                package com.oaktree.struts.common;

                import java.io.Serializable;

                public class ErrResp implements Serializable {
                   private int errnum = 0;
                   private String errdesc = null;

                    // -- integer code for the error
                   public int getErrnum() {
                      return errnum;
                   }

                   public void setErrnum(int errnum) {
                      this.errnum = errnum;
                   }

                   // -- description of error
                   public String getErrdesc() {
                      return errdesc;
                   }

                   public void setErrdesc(String errdesc) {
                      this.errdesc = errdesc;
                   }

                   // -- Utils
                   public String toString()  {
                      StringBuffer sb = new StringBuffer("ErrResp is:\n");


                      sb.append("Errnum=" + errnum + ".\n");
                      sb.append("Errdesc=" + errdesc + ".\n");
                      return sb.toString();
                   }


                }

                AND my code (in the LoginAction.java ) looks like:

                     // simulate XML string return for an error.
                      StringBuffer xmlerr = new StringBuffer("");
                      xmlerr.append("<loginerr>\n");

                      xmlerr.append("<errnum>18</errnum>\n");
                      xmlerr.append("<errdesc>Your smallcorp site login has
expired!!</errdesc>\n");

                      xmlerr.append("</loginerr>\n");

                      // Use Apache digester util to parse that xml string.
                      // LoginResp bean : it contains: Away, Buddy, Group
beans
                      String xrsp = xmlerr.toString();
                      System.out.println("XML is:\n" + xrsp);
                      Digester digester = new Digester();
                      digester.push(this);
                      digester.setDebug(10);
                      digester.setValidating(false);
                      digester.addObjectCreate("loginerr",
                          "com.oaktree.struts.common.ErrResp");
                      digester.addSetProperties("loginerr");
                      digester.addSetNext("loginerr", "gotErr",
                          "com.oaktree.struts.common.ErrResp");

                      try {
                          digester.parse(new org.xml.sax.InputSource(new
StringReader(xrsp)));
                      } catch (IOException e){
                          e.printStackTrace();
                      } catch (SAXException e) {
                          e.printStackTrace();
                      }




                The 'gotErr ' that's referred to above is in the
LoginAction.java class and is simply:

                    // Method called after parsing a Loginerr XML Response:
                    public void gotErr(ErrResp er)
                    {
                        System.out.println("ErrResp bean:\n" +
er.toString());
                    }




                When it runs, the debug output I see in my window is:

                New com.oaktree.struts.common.ErrResp
                Set com.oaktree.struts.common.ErrResp properties
                Call com.oaktree.struts.logon.LogonAction.gotErr(ErrResp is:
                Errnum=0.
                Errdesc=null.
                )
                ErrResp bean:
                ErrResp is:
                Errnum=0.
                Errdesc=null.

                Pop com.oaktree.struts.common.ErrResp

                ... I see the ErrResp object gets created, then properties
set, but when gotErr is called, the bean is empty.  I'm not understanding
why this straightforward case isn't working!  Otherwise, I think the
Digester utility is pretty slick, and I'd also be interested in the
reverse-digester utility, if any, question in "tiles / portal / digester"
message subject post.

                Paula Young

winmail.dat

Reply via email to