Andrea Aime wrote: > Justin Deoliveira ha scritto: >> Hi all, >> >> A few issues have popped up recently related to how maps (in particular >> the metadata map for catalog objects) is persisted/depersisted. The >> latest issue revolves around someone trying ot configure a feature type >> via rest. >> >> The issue is that in an attempt to make xstream less verbose, i made it >> so that someone trying to upload map data with rest can do this: >> >> <map> >> <key1>value1</key1> >> <key2>value2</key2> >> ... >> </map> >> >> As opposed to the xstream default: >> >> <map> >> <entry> >> <string>key1</string> >> <string>value1</string> >> </entry> >> <entry> >> <string>key2</string> >> <string>value2</string> >> </entry> >> </map> >> >> However this has caused some issues. The main issue is that type >> information is lost. This pops up in a couple of places: >> >> * when a feature is persisted in geoserver, and then read back in again >> it is always read back in as a string. >> >> * when a feature type is uploaded via rest, the values in the metadata >> map are of type string. >> >> The end result is the same, ClassClassException for code that assumes >> type information about the metadata map. >> >> The quick solution for now has been to replace this: >> >> (Integer) featureType.getMetadata().get( "foo" ); >> >> with: >> >> Converters.convert( featureType.getMetadata().get( "foo" ), Integer.class ); >> >> The longer term solution is to amend the xstream persistence a bit so >> that type information is not lost. This is however a bit tricky though. >> And probably won't fix every REST case. >> >> So I am wondering. What do people think about making it practice that >> whenever accessing data from a metadata map, that a converter be used. > > I would be ok using the converters everywhere. But we should make it > pretty explicit that the user map is made of strings, > Map<String,String>. This way the need of using some kind of conversion > is obvious (teaching people that they can use Converters instead of > Integer.parseInt(xxx) is another story).
It looks to me like MetadataMap claims to be an class itself rather than a java.uti.Map MetadataMap{ private Map internalMap; ... boolean contains(Serializable key); <T extends Serializable> get(Serialiable key, Class<T>); ///same for put } then isolate the use of converters inside it. my 2c > > Cheers > Andrea > -- Gabriel Roldan OpenGeo - http://opengeo.org Expert service straight from the developers. ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ Geoserver-devel mailing list Geoserver-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-devel