Keith,
Thanks again for your suggestions. I tried your ideas-
and have found:
1. I listed the identity=id in the <class> element of
Foo - and the parent field under Bar as <bind-xml
node="attribute" reference="true"  /> yet I still do
not get the expected result- just a null pointer when
referencing the parent fields.
Does the input xml have to change at all- I have
changed only the mapping xml- or the classes?
I need to have Bar as a child of Foo so I need to have
an element for Bar:
 <field name="bar" type="Bar">
                        <bind-xml name="bar"
node="element"/>
                </field>

or else Castor complains :
unable to find FieldDescriptor for 'bar' in
ClassDescriptor of foo

for the xml....So am I just not seeing something here
or is it still a limitation for a relation such as
this?

Thanks for your input,
Jim





--- Keith Visco <[EMAIL PROTECTED]> wrote:
> 
> 
> 
> Jim Otte wrote:
> > 
> > Keith,
> > 
> > Thanks for the lead- I believe that is the right
> > trail- however, when I implement the ID/IDREF
> > attributes- I still do not get the reference to
> the
> > parent from the child - note my differences from
> your
> > example:
> > 1. The Parent Foo has the child Bar class as an
> > attribute: Foo has Bar bar; as a class member.
> 
> Yes...that's understood...I saw the classes you
> listed in your original
> post. When using ID/IDREF however you have to mark
> them in the
> mapping file as attributes. This is a limitation on
> ID/IDREF and
> the limitation comes from DTDs. ID/IDREF must be
> specified as
> attributes in the XML instance.
> 
> > 2. It is not necesarily the case that Bar extends
> Foo
> > (am not certain if that is what was being
> understood)-
> > Bar should just be a child class attribute with a
> > reference to the parent- no special relation
> outside
> > of that.
> 
> Yes...no misunderstanding here. My example
> demonstrates a simple
> parent-child relationship.
> 
> > 3. It is possible that Foo may have more than 1
> field
> > as "ID" or primary -key.
> 
> Castor doesn't yet have the ability to support
> multiple
> fields as the key (actually it doesn't support
> key/keyref yet)
> 
> You can work around this limitation by providing one
> field that
> incorporates both keys such as:
> 
> public String getIdentity() {
>     return key1 + "," + key2;
> }
> 
> > 4. The parent reference is a type node="element"
> > rather than "attribute"- although I get the same
> > result even if I do switch that:
> > Nevertheless- when I use the following mapping:
> 
> Both the identity field and the reference field need
> to be marked as
> attributes.
> 
> --Keith
> 
> 
> > 
> > <class name="tudo.foobar.castor.domain.Foo"
> > identity="id">
> >                 <map-to xml="foo"/>
> > 
> >                 <field name="id"
> > type="java.lang.String" >
> >                         <bind-xml name="id"
> > node="element"/>
> >                 </field>
> > 
> >                 <field name="bar" type="Bar">
> >                         <bind-xml name="bar"
> > node="element"/>
> >                 </field>
> >      </class>
> > 
> >      <class name="Bar"  >
> >                 <map-to xml="bar"/>
> > 
> >                 <field name="greeting"
> > type="java.lang.String">
> >                         <bind-xml name="greeting"
> > node="element"/>
> >                 </field>
> > 
> >                 <field name="parent" type="Foo" >
> >                         <bind-xml name="foo"
> > reference="true" />
> >                 </field>
> >      </class>
> > 
> > with the classes:
> > public class Foo {
> >         public Bar bar;
> >         public String id;
> > 
> > and
> > 
> > public class Bar{
> > 
> >         public String greeting;
> >         public Foo parent;
> > 
> > and xml:
> > <foo>
> >         <id>42</id>
> >         <bar>
> >                 <greeting>hello world</greeting>
> >         </bar>
> > </foo>
> > 
> > and run the test with:
> > 
> > System.out.println(foo.getBar().getGreeting());
> > 
> >
>
System.out.println(foo.getBar().getParent().getId());
> > 
> > I would expect:
> > 
> > hello world
> > 42
> > 
> > Instead I still get:
> > 
> > hello world
> > java.lang.NullPointerException
> > 
> > The Child Bar class does not seem to get a
> reference
> > to the parent Foo even using the ID and IDREF
> > tags....although I may very well be mis-applying
> them.
> > 
> > Any further thoughts/corrections would be most
> > welcome-
> > Thanks again for the help- I have been racking my
> > brains on this for quite awhile....
> > 
> > Jim
> > 
> > --- Keith Visco <[EMAIL PROTECTED]> wrote:
> > >
> > >
> > > Jim,
> > >
> > > Castor supports parent-child relationships via
> > > ID/IDREF and can be
> > > expressed as such in a mapping file:
> > >
> > >
> > > <class name="Foo" identity="id">
> > >    <field name="id" type="string"/>
> > > </class>
> > >
> > > <class name="Bar">
> > >   <field name="parent" type="Foo">
> > >     <bind-xml node="attribute"
> reference="true"/>
> > >   </field>
> > > </class>
> > >
> > > Note the identity="id" specified on the Foo
> class
> > > mapping. And also note
> > > the reference="true" specified on the bind-xml
> > > element for the parent
> > > field in the Bar class mapping.
> > >
> > >
> > > I hope that helps.
> > >
> > > --Keith
> > >
> > > Jim Otte wrote:
> > > >
> > > > Ralf,
> > > >
> > > > Thanks for your reply!
> > > > I tried your suggestion- by modifying the
> domain
> > > > objects Foo and Bar- Now when I run the test
> class
> > > I
> > > > get the following error:
> > > >
> > > > org.xml.sax.SAXException: unable to add 'bar'
> to
> > > <foo>
> > > > due to the following exception:
> > > > >>>--- Begin Exception ---<<<
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
Yahoo! Mail SpamGuard - Read only the mail you want.
http://antispam.yahoo.com/tools

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to