Problem with castor xml mapping
Hi,
we have following problem with castor xml mapping.
How to use references in the collections(Hashmap or vector)?
WE have a method called getAttribute map which will return a hashmap consist different type of objects. We want to keep only the
references of objects if that object occurs more than once,instead of keeping the whole object
Following is the the xml mapping file.
<mapping>
<class name="com.opvista.ndtool.core.mos.ManagedObject" identity="Id" auto-complete="false" verify-constructable="false">
<map-to xml="ManagedObject"/>
<field name="Id" get-method="getId" set-method="setId" type="string">
<bind-xml name="Id" node="attribute"/>
</field>
<field name="AttributeMap" type="org.exolab.castor.mapping.MapItem" collection="map" get-method="getAttributeMap">
<bind-xml name="AttributeMap" node="element">
<class name="org.exolab.castor.mapping.MapItem">
<field name="key" type="java.lang.Object">
<bind-xml name="key" node="attribute"/>
</field>
<field name="value" type="java.lang.Object">
<bind-xml name="value" node="element" reference="true"/>
</field>
</class>
</bind-xml>
</field>
</class>
</mapping>
we are using reference=true for the values. But it will throw below exception.
Unable to resolve ID for instance of class 'java.lang.String' due to the following error: Unable to resolve ClassDescriptor.
at org.exolab.castor.xml.Marshaller.getObjectID(Marshaller.java:1988)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:1628)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:1831)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:1814)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:1825)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:821)
Please help us to overcome from this problem?
Thanks,
Dileep