Hi, jarkko pave wrote: > 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? This is not about using XML schemas as an alternative. I am actually just trying to convey the mechanism that exist within XML schemas to express the very same concept, that's all.
Werner > > 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 >> >> >> > --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email

