Sumanta-

This type of behavior is actually quite easy with Castor. I used your Container class and created two dummy classes, ClassA and ClassB (one contains a string, the other a double). I then wrote up a mapping file (see below), and a driver that creates two containers, puts them in an ArrayList, marshalls them out and unmarshalls them back in.

Here's the mapping file:

   <mapping>
     <class name="Container">
       <map-to xml="container"/>

       <field name="containerId" type="string">
         <bind-xml name="id" node="attribute" />
       </field>

       <field name="holderObj">
         <bind-xml name="child" />
       </field>
     </class>

     <class name="ClassA">
       <field name="str1" type="string" direct="true">
         <bind-xml name="string" node="attribute" />
       </field>
     </class>

     <class name="ClassB">
       <field name="dbl1" type="double" direct="true">
         <bind-xml name="pi" node="attribute" />
       </field>
     </class>
   </mapping>

Just a note, the class names need to be fully qualified (I cheated in this case). And here's the output xml:

   <?xml version="1.0" encoding="UTF-8"?>
   <array-list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
     <container id="Container1">
       <child string="Class A String" xsi:type="class-a"/>
     </container>
     <container id="Container2">
       <child pi="3.141592653589793" xsi:type="class-b"/>
     </container>
   </array-list>

Castor correctly unmarshalled the XML into objects with no problem. If you want the xml to change based on the "contained" classes, you can look into the auto-naming attribute (bind-xml element) in the mapping documentation:

   http://castor.codehaus.org/xml-mapping.html

HTH,
Stephen

Sumanta Ranjan Das wrote:
Hi,
I have my object hierarchy that represents a container which in turn can hold any type of other uder-defined objects. e.g. the following Container object looks like public class Container {
  private String containerId ;
  private Object holderObj ;
public String getContainerId()
  {
    return containerId ;
  }
  public void setContainerId(String id)
  {
    containerId  = id ;
  }
  public Object getHolderObj()
  {
    return holderObj ;
  }
  public void setHolderObj(Object obj)
  {
    holderObj = obj;
  }
}
I have 2 holder objects (A and B) which are altogether different in terms of relationship. In one case when i create Container object, i could do
container.setHolderObj (A aObject)
whereas in other case, i would be doing
container.setHolderObj (B bObject)
In such a case how do i define the mapping file for Container class as there is no explicit reference to either of A or B object in the Container class. All i know is that Container can contain either of A or B during the runtime. Does castor XML support such object structures? Can anyone share an example for the mapping file in case it's already supported? Thanks and regards,
Sumanta

-------------------------------------------------
If you wish to unsubscribe from this list, please send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to