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