Any ideas on this? How could I marshal / unmarshal the example parent-child relation with castor?
jimmi4664 wrote: > > Are you suggesting that I should define the mapping differently instead of > using mapping.xml file? > > For now I preferred experimenting further with the original mapping.xml > path and thought about the possibility of using one field as the "unique > identifier". I think I could use it even though I don't have a pure > "unique identifier" for my class. I can get the example from > http://www.castor.org/how-to-use-references-in-xml.html working. It still > works quite weird when I try this example that follows my actual needs in > concept: > > public class Child { > private String name; > private Parent parent; > private int age; > // getters and setters > } > > public class Parent { > private int id; > private Child child; > // getters and setters > } > > mapping.xml: > > <class name="tests.Parent" identity="id"> > <map-to xml="parent"/> > <field name="id" type="int"> > <bind-xml name="id" node="element" /> > </field> > <field name="child" type="tests.Child"> > <bind-xml name="child" node="element"/> > </field> > </class> > > <class name="tests.Child"> > <map-to xml="child"/> > <field name="name" type="java.lang.String"> > <bind-xml name="name" node="element" /> > </field> > <field name="age" type="int" > > <bind-xml name="age" node="element" /> > </field> > <field name="parent" type="tests.Parent"> > <bind-xml name="parent" node="element" reference="true"/> > </field> > </class> > > marshalling: > > Parent p = new Parent(); > Child c = new Child(); > p.setChild(c); > p.setId(111); > c.setName("Jack"); > c.setAge(10); > c.setParent(p); > .... > marshaller.marshal(p); > > => > > <?xml version="1.0" encoding="UTF-8"?> > <parent> > <id>111</id> > <child> > <name>Jack</name> > <age>10</age> > </child> > </parent> > > So the child's reference to parent is missing, and Child.parent is null > when unmarshalled. > > > > > > Werner Guttmann-6 wrote: >> >> Hi, >> >> jimmi4664 wrote: >>> There's no requirements on the XML, other than I want to persist my >>> objects >>> as an XML file, and be able to reconstruct them later. The resulting XML >>> can >>> (pretty much) be whatever castor would like it to be. >>> >>> So, -for example- following XML would be fine: >>> >>> <person> >>> <name>asdfas</name> >>> <castor-generated-id>4652</castor-generated-id> >>> <cars> >>> <car> >>> <license-plate>34243</license-plate> >>> <owner-castor-generated-id>4652</owner-castor-generated-id > >>> </car> >>> <car> >>> <license-plate>111221</license-plate> >>> < owner-castor-generated-id >4652</owner-castor-generated-id > >>> </car> >>> </cars> >>> </person> >>> >>> The fact is that I don't have "id" field in my objects. They are pure >>> POJOs >>> and just have object references to one another. Castor _could_ >>> theoretically >>> cope with this requirement by just using object identity and generating >>> correct "id" fields internally. >> Yes and no. If you were to use XML schemas to define your contracts, >> you'd be using <xsd:ID/> and <xsd:IDREF/> types to denote that you are >> dealing with (cyclic) references. Have a look at e.g. the XML Schema >> Primer [1] first, and we'll continue our conversation after you have >> familiarized yourself with the concepts presented therein. >> >> Okay ? >> >> Regards >> Werner >> >> [1] http://www.w3.org/TR/xmlschema-0/ >> >>> >>> I don't know if this is available, or do I need to create artificial ID >>> fields in my POJOs? >>> >>> Another alternative is to forget about Car.owner in the mapping and just >>> fix >>> it manually after unmarshalling the objects. >>> >>> >>> Werner Guttmann-6 wrote: >>>> Hi, >>>> >>>> how does/should your XML actually look like ? >>>> >>>> Regards >>>> Werner >>>> >>>> jimmi4664 wrote: >>>>> That seems to assume I would have a unique identifier in my object. >>>>> There's >>>>> actually no good field in my example that could be used like that, and >>>>> what's worse my real world case does not have that either. >>>>> >>>>> So I believe if I want to make castor set the references correctly, I >>>>> need >>>>> to add some artificial ID field to my classes? >>>>> >>>>> >>>>> >>>>> Ralf Joachim-2 wrote: >>>>>> Hi Janne, >>>>>> >>>>>> when using mapping usage of references as explained in: >>>>>> >>>>>> http://www.castor.org/how-to-use-references-in-xml.html >>>>>> >>>>>> may help. If you generate code out of XSD you may need to take a look >>>>>> at >>>>>> xs:id and xs:idref to handle this. >>>>>> >>>>>> Having said that I never used that myself. >>>>>> >>>>>> Regards >>>>>> Ralf >>>>>> >>>>>> jimmi4664 schrieb: >>>>>>> I tried autocreating mapping file for a simple example using >>>>>>> MappingTool >>>>>>> to >>>>>>> maybe give a hint on how to do this: >>>>>>> >>>>>>> public class Owner { >>>>>>> private String name; >>>>>>> private ArrayList<Vehicle> vehicles = new ArrayList<Vehicle>(); >>>>>>> >>>>>>> public String getName() { >>>>>>> return name; >>>>>>> } >>>>>>> >>>>>>> public void setName(String name) { >>>>>>> this.name = name; >>>>>>> } >>>>>>> >>>>>>> public ArrayList<Vehicle> getVehicles() { >>>>>>> return vehicles; >>>>>>> } >>>>>>> >>>>>>> public void setVehicles(ArrayList<Vehicle> vehicles) { >>>>>>> this.vehicles = vehicles; >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> public class Vehicle { >>>>>>> private String name; >>>>>>> private Owner owner; >>>>>>> >>>>>>> public String getName() { >>>>>>> return name; >>>>>>> } >>>>>>> >>>>>>> public void setName(String name) { >>>>>>> this.name = name; >>>>>>> } >>>>>>> >>>>>>> public Owner getOwner() { >>>>>>> return owner; >>>>>>> } >>>>>>> >>>>>>> public void setOwner(Owner owner) { >>>>>>> this.owner = owner; >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> MappingTool tool = new MappingTool(); >>>>>>> tool.setInternalContext(new >>>>>>> BackwardCompatibilityContext()); >>>>>>> boolean deep = true; >>>>>>> File targetFile = new File("generated-mapping.xml"); >>>>>>> log.debug("generating mapping file..."); >>>>>>> tool.addClass(Owner.class, deep); >>>>>>> fw = new FileWriter(targetFile); >>>>>>> tool.write(fw); >>>>>>> log.debug("...done generating mapping file: " + >>>>>>> targetFile); >>>>>>> >>>>>>> But the end result is: >>>>>>> >>>>>>> <?xml version="1.0" encoding="UTF-8"?> >>>>>>> <mapping xmlns="http://castor.exolab.org/" >>>>>>> xmlns:cst="http://castor.exolab.org/"> >>>>>>> <description xmlns="">Castor generated mapping >>>>>>> file</description> >>>>>>> <class name="tests.Owner"> >>>>>>> <description xmlns="">Default mapping for class >>>>>>> tests.Owner</description> >>>>>>> <map-to/> >>>>>>> <field name="name" type="java.lang.String"> >>>>>>> <bind-xml name="name" node="element"/> >>>>>>> </field> >>>>>>> <field name="vehicles" type="java.lang.Object" >>>>>>> collection="arraylist"> >>>>>>> <bind-xml name="vehicles" node="element"/> >>>>>>> </field> >>>>>>> </class> >>>>>>> </mapping> >>>>>>> >>>>>>> So it seems it maps Vehicles in the list as Objects, which does not >>>>>>> help >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> -- >>>>>> >>>>>> Syscon Ingenieurbüro für Meß- und Datentechnik GmbH >>>>>> Ralf Joachim >>>>>> Raiffeisenstraße 11 >>>>>> 72127 Kusterdingen >>>>>> Germany >>>>>> >>>>>> Tel. +49 7071 3690 52 >>>>>> Mobil: +49 173 9630135 >>>>>> Fax +49 7071 3690 98 >>>>>> >>>>>> Internet: www.syscon.eu >>>>>> E-Mail: [email protected] >>>>>> >>>>>> Sitz der Gesellschaft: D-72127 Kusterdingen >>>>>> Registereintrag: Amtsgericht Stuttgart, HRB 382295 >>>>>> Geschäftsleitung: Jens Joachim, Ralf Joachim >>>>>> >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe from this list, please visit: >>>>>> >>>>>> http://xircles.codehaus.org/manage_email >>>>>> >>>>>> >>>>>> >>>>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe from this list, please visit: >>>> >>>> http://xircles.codehaus.org/manage_email >>>> >>>> >>>> >>>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe from this list, please visit: >> >> http://xircles.codehaus.org/manage_email >> >> >> >> > > -- View this message in context: http://old.nabble.com/How-to-map-cyclic---recursive-objects--tp26317185p26369227.html Sent from the Castor - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email

