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
>
>
>

Reply via email to