Bryan,

if you are stuck with Castor 0.9.9, most of the bug fixing and/or
refactoring that has gone into (better) support for (nested) maps will
not be available to you .. :-(. Are you in a position to explain briefly
why you could not switch to e.g. Castor 1.1 or 1.1.1 ?

I will have a look at CASTOR-1313 to get an idea what this is about ....

Werner

Bryan Helm wrote:
> I had a lot of problems with this, and had to hack up
> my version of Castor to get it to work (so now I am
> stuck on an older version).  For version 0.9.9.1, I
> added my own support following the pattern of the
> existing support.  I had to implement new MapItem
> classes for arrays or collections to be values of hash
> maps. I did not submit my changes as a patch because I
> don't think what I did was the right way to support
> this - it was a quick-and-dirty fix.
> 
> See CASTOR-1313 for other related Map weaknesses when
> the value is itself multivalued, e.g. a Map, List, or
> array.  If somebody is revamping Map processing, it
> would be nice to keep that in mind as well.
> 
> Bryan
> 
> --- Christopher Spoehr <[EMAIL PROTECTED]> 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
>>
>>
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> 
> ---------------------------------------------------------------------
> 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