hi all

i've committed patch providing this functionality into the HEAD version of 
digester if you want to give it a go. (the java docs should explain how to 
make it work.)

the implementation committed has some differences from the patch supplied 
by Simon Kitching but some of the code was used and it certainly made my 
life easier (thanks simon).

- robert

On Tuesday, July 9, 2002, at 10:55 PM, Simon Kitching wrote:

> Hi Robert/Edgar.
>
> I sent in a patch a while ago which I think would solve your problem.
> [It was a while ago, so my memory might be misleading me].
>
> There was no response; I meant to follow up but have been kind of busy
> later.
> See
> http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102150414316796&w=
> 2
>
> I'm not claiming that the patch *should* have been added; there may
> well have been reasons not to..
>
> As mentioned in the referenced email, there are a couple of solutions
> that don't involve modifying digester:
> (a) write CallMethodRules to map attributes to setter methods
>     instead of using SetProperties.
> (b) writing an XXXBeanInfo bean properties class which specifies
>     attribute-name -> setter-method mappings (see java beans
>     documentation).
>
> Regards,
>
> Simon
>
>> -----Original Message-----
>> From: robert burrell donkin [mailto:[EMAIL PROTECTED]]
>> Sent: Wednesday, July 10, 2002 8:47 AM
>> To: Jakarta Commons Users List
>> Subject: Re: Digester: How to make a rule that maps an XML
>> attribute to a Java Beans property with a different name?
>>
>>
>> hi edgar
>>
>> i think that this ability might well be missing from digester at the
>> moment.
>>
>> there are various ways in which this could be added. i'll
>> have a think
>> about which seems the best. (i don't know if anyone out there has any
>> preferences.)
>>
>> - robert
>>
>> On Tuesday, July 9, 2002, at 05:15 PM, Edgar Vonk wrote:
>>
>>> Hi all,
>>>
>>> I have an XML message of which the toplevel element contains amongst
>>> others
>>> an attribute named 'class'.
>>> I cannot map this attribute to a JavaBeans property named
>> 'class' since
>>> the
>>> getClass() method is final in java.lang.Object.
>>>
>>> Therefore I have created a different JavaBeans property named
>>> 'content' to which I want to map this XML attribute. The
>> same JavaBean
>>> I want to use for the other attributes of this XML element.
>>>
>>> My question is how do I do this (neatly)?
>>>
>>> I have looked into the Digester documentation but could not find a
>>> way. In the end I took the source code of both the latest
>>> commons-digester (version 1.2) and the commons-beanutils
>> (version 1.3)
>>> and created my own 'SetPropertiesRule' and 'BeanUtils' class.
>>>
>>> In the former I adapted the 'begin' method to include
>> special handling
>>> for my 'class' attribute. The latter I only modified
>> slightly: I made
>>> the 'setProperty' method public.
>>> Why is it private anyway? It seems to me like a method
>> which could be of
>>> use
>>> outside of the class.
>>>
>>> My version of the SetPropertiesRule class now maps all
>> attributes of
>>> my 'request' element to their corresponding JavaBeans
>> property except
>>> for the 'class' attribute. It maps this one to the
>> 'content' property.
>>>
>>> However, I'd much rather just use the digester API as it is
>> (well, I
>>> am still using the API I guess..) so I wondered if there
>> was a neater
>>> way to do this?
>>> Somehow this feels like a problem other people may have run
>> into in the
>>> past?
>>>
>>>
>>> Example XML message:
>>>
>>> <?xml version="1.0" encoding="ISO-8859-1"?>
>>> <!DOCTYPE request SYSTEM "http://localhost:8080/zrt_1_0.dtd";>
>>> <request class="screensaver" command="GetCategories"
>>> msisdn="31612345678"
>>>>
>>> </request>
>>>
>>> Example part of corresponding JavaBean:
>>>
>>> public class Request {
>>>     public String getCommand() {..}
>>>     public void setCommand(String command) {..}     
>>>     public String getContent() {..}
>>>     public void setContent(String content) {..}
>>> }
>>>
>>> Current solution: part of my adapted SetPropertiesRule#begin method:
>>>
>>>             // special handling for 'class' attribute
>>>             // this attribute corresponds to the 'content' property
>>>             // in the Java bean
>>>             String name = "class";
>>>             String value = classValue;
>>>             if (digester.getLogger().isDebugEnabled()) {
>>>                     
>> digester.getLogger().debug("[SetPropertiesRule]{" +
>>> digester.getMatch() +
>>>                         "} Setting property '" + name + "' to '" +
>>>                         value + "'");
>>>             }
>>>             RequestBeanUtils.setProperty(top, "content", value);
>>>
>>>
>>>
>>> regards,
>>>
>>> Edgar
>>>
>>> _______________________
>>> Edgar Vonk
>>> Software Engineering
>>> Info.nl
>>> Sint Antoniesbreestraat 16
>>> 1011 HB Amsterdam
>>>
>>> [EMAIL PROTECTED]
>>> tel:        020 - 5 30 91 00
>>> fax:       020 - 5 30 91 01
>>> mobile:  06 - 417 23 151
>>> http://www.info.nl/
>>>
>>> --
>>> To unsubscribe, e-mail:
>> <mailto:commons-user-> [EMAIL PROTECTED]
>>> org>
>>> For
>> additional
>> commands, e-mail:
>>> <mailto:[EMAIL PROTECTED].
>>> org>
>>>
>>
>>
>> --
>> To unsubscribe, e-mail:
>> <mailto:commons-user-> [EMAIL PROTECTED]>
>> For
>> additional commands,
>> e-mail: <mailto:[EMAIL PROTECTED]>
>>
>>
>
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED].
> org>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED].
> org>
>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to