Hi
i would like to create hashtable mapping. I want to have my Brand object to
contain hashtable of validators, where the keys in the hashmap will be
values of step attributes and the values will be implementations of
validator interface.
My mapping looks like this:

<mapping xmlns="http://castor.exolab.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://castor.exolab.org/
http://castor.org/mapping.xsd">
   <class name="com.sth.configurati
on.Configuration">
       <map-to xml="configuration"/>
       <field collection="arraylist" name="brands"
type="com.sth.configuration.Brand ">
           <bind-xml name="brand" node="element"/>
       </field>
   </class>
   <class name="com.sth.configuration.Brand">
       <map-to xml="brand"/>
       <field name="name">
           <bind-xml name="name" node="attribute"/>
       </field>
       <field name="parser"
type="com.sth.configuration.parsers.BrandParser ">
           <bind-xml name="parser" node="element"/>
       </field>
             <field name="validators" collection="hashtable"
container="false">
           <bind-xml name="validators" node="element">
               <class name="org.exolab.castor.mapping.MapItem">
                   <field name="key" type=" java.lang.Integer">
                       <bind-xml name="step" node="attribute"/>
                   </field>
                   <field name="value"
type=" com.sth.configuration.model.Validator">
                       <bind-xml name="implementation" node="element"/>
                   </field>
               </class>
           </bind-xml>
       </field>
   </class>
   </mapping>

My conf file as follows:

 <brand name="newBrand">
       <parser
xsi:type="java: com.sth.configuration.parsers.DefaultParser"/>
          <validators>
           <validator step="1">
               <implementation
xsi:type="java:com.sth.validators.validator "></implementation>

           </validator>
           <validator step="2">
               <implementation
xsi:type="java:com.sth.validators.validator2"></implementation>

           </validator>
       </validators>
   </brand>
</configuration>

and my class
public class Brand {
       private BrandParser parser;
       private Hashtable validators;
}

After unmarshalling i got:
org.exolab.castor.mapping.MappingException: The return type for method
public java.lang.Object org.exolab.castor.mapping.MapItem.getValue() does
not match the declared field type com.sth.configuration.model.Validator at
org.exolab.castor.mapping.loader.MappingLoader.findAccessor(MappingLoader.ja
va:1231)
       at
org.exolab.castor.mapping.loader.MappingLoader.createFieldHandler(MappingLoa
der.java:973)
       at
org.exolab.castor.mapping.loader.MappingLoader.createFieldDesc(MappingLoader
.java:776)
       at
org.exolab.castor.xml.XMLMappingLoader.createFieldDesc(XMLMappingLoader.java
:369)
       at
org.exolab.castor.mapping.loader.MappingLoader.createFieldDescs(MappingLoade
r.java:639)
       at
org.exolab.castor.mapping.loader.MappingLoader.createDescriptor(MappingLoade
r.java:462)
       at
org.exolab.castor.xml.XMLMappingLoader.createDescriptor(XMLMappingLoader.jav
a:227)
       at
org.exolab.castor.xml.XMLMappingLoader.createFieldDesc(XMLMappingLoader.java
:481)
       at
org.exolab.castor.mapping.loader.MappingLoader.createFieldDescs(MappingLoade
r.java:639)
       at
org.exolab.castor.mapping.loader.MappingLoader.createDescriptor(MappingLoade
r.java:462)
       at
org.exolab.castor.xml.XMLMappingLoader.createDescriptor(XMLMappingLoader.jav
a:227)
       at
org.exolab.castor.mapping.loader.MappingLoader.loadMapping(MappingLoader.jav
a:313)
       at org.exolab.castor.mapping.Mapping.getResolver (Mapping.java:292)
       at org.exolab.castor.mapping.Mapping.getResolver(Mapping.java:247)
       at
org.exolab.castor.xml.Unmarshaller.setMapping(Unmarshaller.java:475)
       at org.exolab.castor.xml.Unmarshaller .<init>(Unmarshaller.java:246)

Any help

Reply via email to