commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From robert burrell donkin <>
Subject Re: [Betwixt] reading/writing xml with existing @id attribute
Date Wed, 08 Jan 2003 21:03:50 GMT
hi kevin

i don't think that you're missing anything here. betwixt only allows all 
or nothing.

i suppose that it would be possible to replace the simple 
attributeForPrimitives with some sort of strategy interface which would 
allow the user to specify a custom policy about which properties should 
map to attributes and which to elements. maybe i'll add this to the to do 
list but we're focused on pushing towards that alpha release so don't 
expect it to be done any time soon.

if it's a real itch then maybe you might want to contribute a patch to 
provide this functionality. if so, i'll certainly provide whatever help i 

- robert

On Wednesday, January 8, 2003, at 12:05 AM, Kevin Ross wrote:

> First, I'm new to Betwixt, but by no means new to the Digester.  I've
> used the Digester successfully for several projects.
> I'm having a problem.  I cannot figure out how to have my existing xml
> be read/written properly (without a betwixt file), when my XML root
> element already contains an attribute @id and also has (what Betwixt
> classifies as a 'primitive') an element <name>, which is a String.  For
> example:
> <customer id="111">
>        <name>XYZ LLC</name>
> </customer>
> Tester:
> BeanReader reader = new BeanReader();
> XMLIntrospector x =  new XMLIntrospector();
>             x.setElementNameMapper(new DecapitalizeNameMapper());
>             x.setAttributesForPrimitives(false);
> reader.setXMLIntrospector(x);
> reader.registerBeanClass( Customer.class );
> The problem lies in the x.setAttributesForPrimitives(true);.  This works
> for @id, but not for <name>, or vice versa when set to false when
> is:
> public class Customer{
>             private String id;
>             private String name;
>             .
> }
> I know I can do the following and make it work, but this is somewhat
> bothersome since I have to do this for every entity with an id:
> <?xml version="1.0" encoding="UTF-8"?>
> <info primitiveTypes="element">
>        <element name="customer">
>              <attribute name="id" property="id"/>
>              <addDefaults/>
>        </element>
> </info>
> How can I get both @id and <name> to be read/written properly
> programmatically, exactly as the source file shows?   It would be easier
> for me to specify an AttributeDescriptor generically, instead of
> providing a betwixt file for all of them.
> Am I missing something here?
> Thanks,
> Kevin Ross

View raw message