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

-- 
View this message in context: 
http://old.nabble.com/How-to-map-cyclic---recursive-objects--tp26317185p26336953.html
Sent from the Castor - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to