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

