Actually, thinking about this, is there support for marshalling/unmarshalling HashMaps that store collections of other objects, e.g. an ArrayList of some domain objects.
Werner [EMAIL PROTECTED] wrote: > On the lastest cut of CVS, I'm trying to marshal/unmarshal a map, like > in this post: > > http://www.mail-archive.com/[email protected]/msg06205.html > > Marshalling works great. When I unmarshall, there is no data in my > object. > I tried a different approach and had problems there, too. > I'll send the results of Approach #2 in a separate email. > > Thanks in advance for looking at this. > > ////////// mapping.xml ///////////////////////////////////////// > <mapping> > <class name="Parent"> > <field name="children" type="Child" collection="map" > get-name="getChildren" > set-name="setChildren"> > <bind-xml name="string" node="element"/> > </field> > </class> > <class name="Child" auto-complete="true"> > <map-to xml="Child"/> > </class> > </mapping> > > //////// Parent.java ///////////////////////////////////////// > import java.util.Map; > import java.util.HashMap; > > public class Parent { > > HashMap _children = new HashMap(); > > public void addChild(Child c) { > > _children.put(c.getKey(), c); > } > > public Child getChild(Object key) { > return (Child) _children.get(key); > } > > public Map getChildren() { > return _children; > } > public void setChildren(Map m) { > _children = (HashMap)m; > } > } > > ///////////// Child.java ////////////////////////////////// > public class Child { > String firstName = null; > Object key = null; > > public Child(){} > > public String getFirstName() { > return firstName; > } > > public void setFirstName(String strName) { > firstName = strName; > } > public void setKey(Object objKey) { > key = objKey; > } > > public Object getKey() { > return key; > } > > public String toString() { > return firstName; > } > } > > ///////////// HashTest.java ////////////////////////// > import java.util.HashMap; > import java.util.Iterator; > import java.util.Collection; > import java.util.Map; > > import java.io.StringWriter; > import java.io.StringReader; > > import org.exolab.castor.mapping.Mapping; > import org.exolab.castor.mapping.MappingException; > > import org.exolab.castor.xml.Unmarshaller; > import org.exolab.castor.xml.Marshaller; > > import java.io.IOException; > import java.io.FileReader; > import java.io.OutputStreamWriter; > > import org.xml.sax.InputSource; > > public class HashTest { > > public static void main(String[] args) { > > Parent p = new Parent(); > > Child c = null; > c = new Child(); c.setFirstName("Betty"); > c.setKey("betty_key"); p.addChild( c); > c = new Child(); c.setFirstName("Wilma"); > c.setKey("wilma_key"); p.addChild( c ); > c = new Child(); c.setFirstName("Fred"); > c.setKey("fred_key"); p.addChild( c ); > c = new Child(); c.setFirstName("Barney"); > c.setKey("barney_key"); p.addChild( c ); > > testParent(p); > Mapping mapping = new Mapping(); > > try { > // 1. Load the mapping information from the file > mapping.loadMapping( "mapping.xml" ); > > StringWriter sw = new StringWriter(); > // 4. marshal the data with and print the XML in the console > Marshaller marshaller = new Marshaller(sw); > > marshaller.setMapping(mapping); > marshaller.marshal(p); > System.out.println("Here is the data [" + sw.toString() + "]"); > > StringReader sr = new StringReader(sw.toString()); > // 2. Unmarshal the data > Unmarshaller unmar = new Unmarshaller(mapping); > Parent newParent = (Parent)unmar.unmarshal(sr); > > /////////////////////////////////////////////////////// > /////// > /////// P R O B L E M > /////// > System.out.println("PROBLEM: Data didn't get unmarshalled!"); > testParent(newParent); > > } catch (Exception e) { > System.out.println(e); > } > } > public static void testParent(Parent p) { > Child c = p.getChild("fred_key"); > System.out.println("just got first child"); > System.out.println(" child: [" + c + "] [" + c.toString() + "]"); > System.out.println("key: Fred_key child: [" + > p.getChild("fred_key").toString() + "]"); > > Map kids = p.getChildren(); > > for(Iterator itr = kids.values().iterator(); itr.hasNext();) { > Child kid = (Child)itr.next(); > System.out.println("Here is a child [" + kid.toString() + "] > key [" + kid.getKey() + "]"); > } > > } > > } > > ----------------------------------------------------------- > If you wish to unsubscribe from this mailing, send mail to > [EMAIL PROTECTED] with a subject of: > unsubscribe castor-dev ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-dev
