Hi,

jarkko pave wrote:
> 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?
This is not about using XML schemas as an alternative. I am actually
just trying to convey the mechanism that exist within XML schemas to
express the very same concept, that's all.

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

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

    http://xircles.codehaus.org/manage_email


Reply via email to