Good point Werner. Do you know where to register custom collection handlers? Thanks!
Regards, Martin -------- Original-Nachricht -------- > Datum: Wed, 26 May 2010 19:44:19 +0200 > Von: Werner Guttmann <[email protected]> > An: [email protected] > CC: [email protected] > Betreff: Re: AW: [castor-user] Problem with mapping of a MultiValueMap > Hi, > > looking at this thread, I'd rather suggest to implement a new collection > handler for MultiValueMap. I think that should be rather straight-forward. > > Regards > Werner > > On 26.05.2010 19:05, [email protected] wrote: > > Hi Maghen, > > > > > > > > I tried to use FieldHandlers like this before…also failed. I think the > intension of FieldHandlers is not to construct the xml-representation > yourself, but provide Castor with > > > > something it can handle by default (in terms of data mediation you > create a programmatic mapping between classes, not classes and xml). In your > case I would try to do the following: > > > > > > > > ----Info.java > > > > package userhelp; > > > > class Info { > > > > private String name; > > > > private String value; > > > > //getters + setters for name and value as well as > appropriate constructor for Info > > > > } > > > > ---- > > > > > > > > ----mapping.xml > > > > <mapping> > > > > … > > > > <class name=”userhelp.Info” > auto-complete=”true”> > > > > <field name=“name” > type=”java.lang.String”> > > > > <bind-xml > node=”attribute”></bind-xml> > > > > </field> > > > > </class> > > > > <field name=”value” container=”true” > type=”java.lang.String”></field> > > > > … > > > > </mapping> > > > > ---- > > > > > > > > …which produced the following output for me: > > > > <info name=”key”>value</info> > > > > > > > > Now you could try to modify your FieldHandler to return the following in > the convertUponGet: > > > > > > > > return new Info(key.toString(), value.toString()); > > > > > > > > But if you do it like that you have to rely on the collectionIteration > of the fieldhandler and convert each item of the collection in the > convertUponGet (you could also try to populate an ArrayList with the Info > items and > return it if you really need to suppress automatic collectionIteration). > > > > > > > > Hope it helps. > > > > > > > > Regards, > > > > > > > > Martin > > > > > > > > Von: Maghen Calinghee [mailto:[email protected]] > > Gesendet: Dienstag, 25. Mai 2010 15:04 > > An: [email protected] > > Betreff: [castor-user] Problem with mapping of a MultiValueMap > > > > > > > > Hello, > > > > I'm trying to produce an xml code from a map with multiple values. > > I'm using the map class org.apache.commons.collections.map.MultiValueMap > which allows multiple values for one key. > > > > I would like to produce something like that : > > <Info name="key1">value1</Info> > > <Info name="key1">value2</Info> > > <Info name="key2">value2</Info> > > <Info name="keyN">valueN</Info> > > > > But the best I could have is : > > <Info name="key1">value1</Info> > > <Info>value2</Info> > > <Info name="key2">value2</Info> > > <Info name="keyN">valueN</Info> > > > > I'm using the following mapping! (with MapItem) : > > <class name="org.exolab.castor.mapping.MapItem"> > > <map-to xml="Info" /> > > <field name="key" type="string"> > > <bind-xml name="name" location="Info" node="attribute" /> > > </field> > > <field name="value" type="string" collection="arraylist"> > > <bind-xml name="Info" node="element" /> > > </field> > > </class> > > > > Another solution is to use a handler which allows me to get the > MultiValueMap object then i construct the xml code (see the following code) : > > public class MultiValueMapHan! dler extends GeneralizedFieldHandler { > > > > public MultiValueMapHandler() { > > setCollectionIteration(false); > > } > > > > @SuppressWarnings("unchecked") > > @Override > > public Class getFieldType() { > > return MultiValueMap.class; > > } > > > > @Override > > public Object convertUponGet(Object source) { > > > > MultiValueMap map = (MultiValueMap) source; > > StringBuilder xml = new StringBuilder(); > > for (Object key : map.keySet()) { > > for (Object value : map.getCollecti on(key)) { > > ! xml.append("<Info > name=\""+key.toString()+"\">").append(value.toString()).append("<Info/>"); > > } > > } > > return xml.toString(); > > } > > > > @Override > > public Object convertUponSet(Object source) { > > // There is no need to implement this method > > return null; > > } > > } > > > > And i got the following xml code : > > <Request type="keep-put" version="1"> > > <ModuleId>KEEPClient</ModuleId> > > <RequestId>REQUEST001</RequestId> > > <Document>c2FtcGxlIGRvY3VtZW50</Document!> > > <DocumentInfo> > > <Info name="key1">value1<Info/> > > <Info name="key1">value2<Info/> > > <Info name="key2">value2<Info/> > > <Info name="keyN">valueN<Info/> > > </DocumentInfo> > > </Request> > > > > As you could see the '<' and'>' is not escaped and i can't produce the > right xml code. > > > > Does someone have any idea to solve this problem? > > > > Thanks you in advance. > > > > Maghen. > > > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > -- GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT! Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01 --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email

