Not sure my Spanish is good enough .. ;-). Werner
Sebastián Ventura wrote: > Y si no lo dije... lo pensé > > -----Mensaje original----- > De: Werner Guttmann [mailto:[email protected]] > Enviado el: viernes, 13 de noviembre de 2009 10:04 > Para: [email protected] > Asunto: Re: [castor-user] How to map cyclic / recursive objects? > > 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 > > > > > --------------------------------------------------------------------- > 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

