My problem is: 1. I have a given Java object graph with number of objects with relationships between them 2. There's no primary keys / unique identifiers in the objects 3. I am using "- mapping file driven" "modus operandi" for Castor
How do I generate the mapping file to map the object graph (a few examples have been shown in this thread) to XML and back? 2009/11/17 Werner Guttmann <[email protected]> > Hi > > jarkko pave wrote: > > I have used XML, schemas and namespaces and am reasonably familiar with > > those concepts. > > > > The problem is that all the documentation I have read so far is about > > creating this mapping.xml file to describe your mapping. I do not know > how > > XML schemas can be used to define the mapping. > > As the Castor XML reference guide suggest, Castor XML can work in > various modi operandi: > > - introspection mode > - mapping file driven > - working with generated POJO/descriptor classes > > Internally, all three modes translate to a binding between a Java > artefact and an XML artefact, so that Castor XML can perform its XML > data binding functions. > > > I have not seen any > > documentation that talks about using schemas for that. > I am sure the reference guide has a lot of documentation about the XML > source (code) generator, where Java POJOs and their corresponsing > descriptor classes are generated from an XML schema. > > > Hence I don't see how > > IDREFs etc are relevant to my problem. > Taking into account the duality explained above, it's just another > starting point for Castor XML. > > For example the mentioned > > http://www.castor.org/how-to-use-references-in-xml.html talks about > creating > > a mapping XML and I cannot see schemas mentioned there. > > > > Please enlighten me... > > > > 2009/11/17 Werner Guttmann <[email protected]> > > > >> Hi, > >> > >> jarkko pave wrote: > >>> Hi, > >>> > >>> I have looked a bit at schema, ID and IDREFs... > >>> > >>> how do I "use XML schemas to define your contracts"? Where can I find > >>> documentation on this? > >> If you are not really familiar with e.g. XML schemas as a construct to > >> provide a structure definition for your XML documents, I am not really > >> of any help here. > >> > >> When you want to use Castor XML as a XML data binding framework, some > >> knowledge in the areas related (XML, XMl schemas, namespaces, ....) are > >> a pre-requisite. > >> > >> Cheers > >> Werner > >>> > >>> 2009/11/13 Werner Guttmann <[email protected]> > >>> > >>>> 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 > > >

