Answering my own question:
I solved this by creating my own custom rules.
1. I created a class StatusCheckRule which is mapped to the
*/a:response/a:propstat/a:status path. In this class I check the content of the
status element and if contains "200 OK" I push a Boolean object with a given
name (digester.push("myName", obj)) to the digester stack with the value true.
2. I created a class MyProjObjectCreateRule which is mapped to the
*/a:response/a:propstat/a:status path. In the begin() method I check if the
statusFlag has been set to true and if it has I create my Appointment object
and push it to the stack. In the end() method I call a method (the method name
is passed in the constructor of MyProjObjectCreateRule) on my parent class by
using MethodUtils (similar to how it's done in SetNextRule).
Everything works fine and I have no problems with setting attributes on my
object etc. My new question is if this is good approach or could I have solved
differently?
Thanks in advance
/Kax
>
> From: kax <[EMAIL PROTECTED]>
> Date: 2004/12/20 m� AM 10:39:48 GMT
> To: <[email protected]>
> �mne: [Digester] Problems
>
> Hello,
>
> The problem I have is not really with Digester, the problem is with the xml I
> have to parse. I thought using Digester was a good approach and I still think
> it is but I need some help to solve a problem I have.
>
> I receive xml which looks like this:
>
> <a:response>
>
> <a:href>https://webmail.myorg.org/exchange/my.name/calendar/mymeeting.EML</a:href>
> <a:propstat>
> <a:status>HTTP/1.1 200 OK</a:status>
> <a:prop>
> <d:to>"Some Name" <[EMAIL PROTECTED]>,
> =?iso-8859-1</d:to>
> <e:subject>Meeting</e:subject>
> <f:dtstart
> b:dt="dateTime.tz">2004-12-13T12:30:00.000Z</f:dtstart>
> <f:dtend
> b:dt="dateTime.tz">2004-12-13T14:00:00.000Z</f:dtend>
> <f:location>Meeting room 4</f:location>
> </a:prop>
> </a:propstat>
> <a:propstat>
> <a:status>HTTP/1.1 404 Resource Not Found</a:status>
> <a:prop><e:textdescription/></a:prop>
> </a:propstat>
> </a:response>
>
> This is a response to a propstat question via webdav to Microsoft Exchange.
> What I want to do is to create a new CalendarAppointment object everytime I
> run in to a <a:propstat> element. But the problem is that if a property of
> the appointment is empty, like the <e:textdescription/> above, a propstat
> element is included in the response and at this <a:propstat> element I don't
> want to create another CalendarAppointment object. And I don't want to try
> setting the properties of the element and I don't want to call the
> addAppointment method, see example xml rule file below:
>
> <pattern value="*/a:prop">
> <object-create-rule classname="myClass"/>
> <call-method-rule pattern="e:subject" methodname="setSubject" paramcount="0"/>
> <call-method-rule pattern="e:textdescription"
> methodname="setText" paramcount="0"/>
> <call-method-rule pattern="f:location" methodname="setLocation"
> paramcount="0"/>
> <set-next-rule methodname="addAppointment"/>
> </pattern>
>
> A way to solve this would be to check the content of the <a:status> element.
> If it contains 200 everything is ok and the object can be created, the
> properties can be set and the addAppoinntment method could be called,
> otherwise not. Can I acheive this behaviour with Digester?
>
> Thanks in advance
>
> /Kax
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]