Christopher,

can I take it you have had a look at

http://www.castor.org/how-to-map-a-hashtable.html

to get an idea about nested hashmaps/collections in general. If that
does not help, you'll find working code in the XML CTF test suite, more
particularly at

http://svn.castor.codehaus.org/browse/castor/castor/trunk/xmlctf/tests/MasterTestSuite/mapping/collections/Maps

I hope this helps

Werner


Christopher Spoehr wrote:
> Hello-
> 
> I'm trying to marshal/unmarshal a HashMap of HashMaps (eventually it will be 
> a HashMap of HMs, Vectors, and Arrays, but one step at a time.) The XML I'll 
> eventually be working with will be given to me as one string - that's why I'm 
> working with the string readers/writers.
> 
> Using the Castor FAQ and the archives, I've gotten Castor to marshal and 
> unmarshal the bean class holding the HM successfully for a single dimensional 
> HashMap. For the nested HM, Castor marshals acceptably but gets hung up on 
> the unmarshaling. Any tips would be appreciated. I'd seen in a previous 
> thread that Stephen Bash has had some experience with this. Are you still out 
> the Stephen?
> 
> Holder Class:
> 
> public class HashMapHolderBean {
> 
>        private HashMap heldHashMap;
>        
>        public HashMapHolderBean()
>        {
>                heldHashMap = new HashMap();
>        }
>        
>        public HashMapHolderBean(HashMap inputHashMap)
>        {
>                heldHashMap = inputHashMap;
>        }
>        
>        public HashMap getHeldHashMap() {
>                return heldHashMap;
>        }
> 
>        public void setHeldHashMap(HashMap map) {
>                heldHashMap = map;
>        }
> }
> 
> HashMapHolderBeanMapping.xml:
> <?xml version="1.0" encoding="UTF-8"?>
> <mapping>
>        <class name="com.sbc.cctp.easl.web.artt.HashMapHolderBean" 
> auto-complete="false">
>                <description>Default mapping for class 
> com.sbc.cctp.easl.web.artt.HashMapHolderBean</description>
>                <map-to xml="hash-map-holder-bean" />
>                <field name="heldHashMap" collection="map">
>                        <bind-xml name="held-hash-map">
>                                <class 
> name="org.exolab.castor.mapping.MapItem">
>                                        <field name="key" type="string">
>                                                <bind-xml name="key" 
> node="element" />
>                                        </field>
>                                        <field name="value" 
> type="java.lang.Object">
>                                                <bind-xml name="value" 
> node="element">
>                                                        <class 
> name="org.exolab.castor.mapping.MapItem" />
>                                                </bind-xml>
>                                        </field>
>                                </class>
>                        </bind-xml>
>                </field>
>        </class>
> </mapping>
> 
> Marshalling/Unmarshalling code:
>        private String testMarshalling()
>        {
>                HashMap mapHM = new HashMap();
>                mapHM.put("test","Hello World.");
>                mapHM.put("test2","Hello Universe");
>                
>                HashMap level2 = new HashMap();
>                level2.put("level2_1","I'm level two");
>                
>                mapHM.put("level2", level2);
>                
>                HashMapHolderBean hashMapHolder = new HashMapHolderBean(mapHM);
>                StringWriter stringWriter = new StringWriter();
>                
>                try
>                {
>                        
>                        //InputSource mappingSource = new InputSource( new 
> StringReader(generateMapString()));
>                        InputSource mappingSource = new 
> InputSource(ClassLoader.getSystemResource("HashMapHolderBeanMapping.xml").toString());
>                        Mapping mapping = new 
> Mapping(AutomatedRegressionTestTool.class.getClassLoader());
>                        mapping.loadMapping(mappingSource);     
>                        
>                        Marshaller marshaller = new Marshaller(stringWriter);
>                        marshaller.setMapping(mapping);
>                        marshaller.marshal(hashMapHolder);
>                }
>                catch (Exception e)
>                {
>                        log.error("Marshalling Error",e);
>                }
>                
>                return stringWriter.getBuffer().toString();
>        }
>        
>        private HashMapHolderBean testUnMarshalling(String marshalled)
>        {
>                String sourceString = marshalled;
>                log.info("Marshalled length: " + marshalled.length());
>                log.info("Source length: " + sourceString.length());
>                log.info(sourceString);
>                
>                HashMapHolderBean hmhb = new HashMapHolderBean();
>                
>                try
>                {                       
>                        InputSource mappingSource = new 
> InputSource(ClassLoader.getSystemResource("HashMapHolderBeanMapping.xml").toString());
>                        Mapping mapping = new 
> Mapping(AutomatedRegressionTestTool.class.getClassLoader());
>                        mapping.loadMapping(mappingSource);
>                        
>                        Unmarshaller unm = new Unmarshaller(mapping);
>                        
>                        hmhb = (HashMapHolderBean)unm.unmarshal(new 
> StringReader(sourceString));
>                }
>                catch (IOException ioException)
>                {
>                        log.error("IOException occured in testUnMarshalling() 
> ", ioException);  
>                }
>                catch (MappingException mappingException)
>                {
>                        log.error("Mapping exception occured in 
> testUnMarshalling() ", mappingException);
>                }
>                catch (Exception e)
>                {
>                        log.error("Unmarshalling exception caught.", e);
>                }
>                
>                return hmhb;
>                
>        }
> 
> toString of the HM returned by testUnMarshalling (from inside of the holder 
> bean, of course):
> {test2=Hello Universe, [EMAIL PROTECTED], test=Hello World.} 
> 
> Of course I'll be happy to answer any clarification questions one may need to 
> ask.
> 
> Chris Spoehr
> 
> ---------------------------------------------------------------------
> 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