Hi Dan,
You can't do that with the location attribute yet. I've got code that I
started a couple weeks back that is for precisely this problem, but I
wasn't finished with it, so it didn't make the 0.9.5 release. It will
however be part of the 0.9.5.1 release.
The only real issue I'm facing right now is how to specify the behavior
in the mapping file.
I was thinking about using predicates in the location as such:
location="bar[1]" would indicate that you want the result merged with
the first bar element. I'm not 100% happy with that, but that's my
current thinking.
A workaround is to use a custom FieldHandler with a wrapper element.
Don't worry this doesn't require any changes to your existing object
model.
The FieldHandler will do the wrapping and unwrapping of the bar element.
So your mapping would look like:
<class name="Foo">
<map-to xml="foo"/>
<field name "bar" type="Bar" handler="BarHandler"/>
</class>
<class name="Bar">
<map-to xml="bar"/>
<field name "barLeft" type="integer">
<bind-xml name="left" node="element"/>
</field>
<field name "barLeft" type="integer">
<bind-xml name="right" node="element"/>
</field>
</class>
And BarHandler would look something like the following:
--Keith
> Dan Marcus wrote:
>
> Hi-
>
> I've just started using Castor and am excited about its potential, but
> I've run into a problem. I would like to map two fields to a single
> wrapper element. I tried using the 'location' attribute of bind-xml,
> but it yielded two wrapper elements. The example below, I hope,
> will make this clearer. Is it possible to nest multiple elements
> within a single wrapper element?
>
> Thanks,
> Dan Marcus
>
> Given a bean like this:
> public class Foo {
> private int barLeft;
> private int barRight;
>
> public int getBarLeft(){
> return barLeft;
> }
>
> public int getBarRight(){
> return barRight;
> }
> }
>
> I would like to create xml like this:
> <foo>
> <bar>
> <left/> <!-- Note left and right are both within a
> single bar-->
> <right/>
> </bar>
> </foo>
>
> Unfortunately, using the mapping below, it looks like this:
> <foo>
> <!-- Note the 2 bar elements! -->
> <bar>
> <left>0</left>
> <bar>
> <bar>
> <right>5</right>
> <bar>
> </foo>
>
> Here's the mapping:
> <class name="Foo">
> <map-to xml="foo"/>
> <field name "barLeft" type="integer">
> <bind-xml name="left" location="bar" node="element"/>
> </field>
> <field name "barLeft" type="integer">
> <bind-xml name="right" location="bar" node="element"/>
> </field>
> </class>
>
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev