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

Reply via email to