Title: Getting "java.lang.IllegalArgumentException: object is not an instance of declaring class" while Marshalling a container of a collections of containers

Hi,

I have slightly altered the MyOrder.java and Order.xml to explain my problem.
I created a ClientSet.java which contains as a member clientData and changed MyOrder.java to contain an array of ClientSet instead of ClientData.

Order.xml

<?xml version="1.0" encoding="UTF-8"?>
<Order reference="12343-AHSHE-314159">
        <Name>Jean Smith</Name>
        <Address>2000, Alameda de las Pulgas, San Mateo, CA 94403</Address>
        <Item reference="RF-0001">
                <Description>Stuffed Penguin</Description>
                <Quantity>10</Quantity>
                <UnitPrice>8.95</UnitPrice>
        </Item>

        <Item reference="RF-0034">
                <Description>Chocolate</Description>
                <Quantity>5</Quantity>
                <UnitPrice>28.50</UnitPrice>
        </Item>

        <Item reference="RF-3341">
                <Description>Cookie</Description>
                <Quantity>30</Quantity>
                <UnitPrice>0.85</UnitPrice>
        </Item>
</Order>


public class MyOrder {

        private String _ref;
// Changed ClientData to ClientSet as an array.
        private ClientSet[] _client;
        private Vector _items;
        private float _total;
....
....
}

public class ClientSet {
        private ClientData clntData;

        public ClientData getClntData() {
                return clntData;
        }

        public void setClntData(ClientData data) {
                clntData = data;
        }

}

ClientData.java and Item.java remain the same.

The mapping file I am using is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN"
                         "http://castor.exolab.org/mapping.dtd">
<mapping>
        <class name="castorMapping.MyOrder">
                <map-to xml="Order" />
                <field name="Reference" type="java.lang.String">
                        <bind-xml name="reference" node="attribute" />
                </field>
                <field name="Total" type="float">
                        <bind-xml name="total-price" node="attribute" />
                </field>
                <field container="true" name="ClientSet" type="castorMapping.ClientSet" collection="array"/>
                <field name="ItemsList" type="castorMapping.Item" collection="vector">
                        <bind-xml name="Item" />
                </field>
        </class>
        <class name="castorMapping.ClientSet">
                <field name="clntData" container="true" type="castorMapping.ClientData" />
        </class>
        <class name="castorMapping.ClientData">
                <field name="Name" type="java.lang.String">
                        <bind-xml name="Name" node="element" />
                </field>
                <field name="Address" type="java.lang.String">
                        <bind-xml name="Address" node="element" />
                </field>
        </class>
        <class name="castorMapping.Item">
                <field name="_reference" type="java.lang.String" direct="true">
                        <bind-xml name="reference" node="attribute" />
                </field>
                <field name="_quantity" type="integer" direct="true">
                        <bind-xml name="Quantity" node="element" />
                </field>
                <field name="_unitPrice" type="float" direct="true">
                        <bind-xml name="UnitPrice" node="element" />
                </field>
                <field name="_description" type="string" direct="true">
                        <bind-xml name="Description" reference="false" node="element" transient="true" />
                </field>
        </class>
</mapping>

Umarshalling works fine, get an the following error while Marshalling:

java.lang.IllegalArgumentException: object is not an instance of declaring class
        at java.lang.reflect.Method.invoke(Native Method)
        at org.exolab.castor.mapping.loader.FieldHandlerImpl.getValue(FieldHandlerImpl.java:375)
        at org.exolab.castor.xml.Marshaller.processContainerAttributes(Marshaller.java:1949)
        at org.exolab.castor.xml.Marshaller.processContainerAttributes(Marshaller.java:1924)
        at org.exolab.castor.xml.Marshaller.processContainerAttributes(Marshaller.java:1969)
        at org.exolab.castor.xml.Marshaller.processContainerAttributes(Marshaller.java:1924)
        at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:1174)
        at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:774)
        at castorMapping.testMapping.main(testMapping.java:71)

Any help would be greatly appreciated.

Thanks

Balaji Adikesavelu

Reply via email to