RE: [Digester] How to assign from a property with aBeanPropertySetter?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

RE: [Digester] How to assign from a property with aBeanPropertySetter?

Jon Steelman-4
Simon,

Thanks, that's what was needed. I've bookmarked the source examples.

Jon

-----Original Message-----
From: Simon Kitching [mailto:[hidden email]]
Sent: Thursday, June 16, 2005 1:20 AM
To: Jakarta Commons Users List
Subject: Re: [Digester] How to assign from a property with
aBeanPropertySetter?

Hi Jon,

On Thu, 2005-06-16 at 00:35 -0400, Jon Steelman wrote:

>     <response>
>         <cardid>1234567890</cardid>
>         <locationID>55555</locationID>
>         <cardAction action="activate"/>
>         <merchant><merchantID>4444</merchantID></merchant>
>     </response>
> </cardActionVendor>
>
> Here's the code:
> digester.addObjectCreate("cardActionVendor/response",
> ActivateResponse.class);
> digester.addBeanPropertySetter(PREFIX + "cardid",
> "primaryAccountNumber");
> digester.addBeanPropertySetter(PREFIX + "locationID");
> digester.addBeanPropertySetter(PREFIX + "/merchant/merchantID");
>
> The ActivateResponse class basically has these properties:
> primaryAccountNumber, locationID, merchantID, & action.
>
> I see how I can nest the merchant/merchantID to assign a property in
my
> class ActivateResponse. I have another direct property in
> ActivateResponse that is the value of cardAction's action, but I don't
> know how to assign it. The following won't work:
> digester.addBeanPropertySetter(PREFIX + "/cardAction/action");
> The ActivateRespone property is at the same level as the other
> properties, cardid & locationID, but how does one set it?

You can use CallMethodRule:
  digester.addCallMethod("response/cardAction", "setAction", 1);
  digester.addCallParam("response/cardAction", 0, "action");

As the xml attribute name "action" matches the name of the property to
be set, you could also use SetPropertiesRule:
  digester.addSetProperties("response/cardAction");

While the latter is shorter, the former seems more appropriate as you
are specifically grabbing the "action" attribute rather than the set of
all attributes (which just happens to be a set of one).


Are you aware that there is a set of examples available with Digester?
I recommend downloading the src distribution and looking in
"src/examples/api"; alternatively browse the source:
http://svn.apache.org/repos/asf/jakarta/commons/proper/digester/trunk/sr
c/examples/api/


Regards,

Simon



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]