I have, and some problems: a) when I can use it, I have the problem described in: http://old.nabble.com/How-to-map-cyclic---recursive-objects--to26317185.html <http://old.nabble.com/How-to-map-cyclic---recursive-objects--to26317185.html>b) I have objects that refer to each other that _dont_ have any kind of "primary key" other than their object identity. I dont know how http://www.castor.org/how-to-use-references-in-xml.html can be used there? Previous messages suggest using schemas somehow (I dont really know how) would solve this problem?
2009/11/17 Werner Guttmann <[email protected]> > Hi, > > have you had a look at > > http://www.castor.org/how-to-use-references-in-xml.html > > as suggested by Ralf ? You'll find all informations related to this task > in this HOW-TO. > > Regards > Werner > > jimmi4664 wrote: > > 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 > >>> > >>> > >>> > >>> > >> > > > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > > >

