Andrea Aime wrote: > Gabriel Roldan ha scritto: >> 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. > > Hum.... uh? > I looked in CatalogInfo and found: > > Map<String,Serializable> getMetadata(); > > in ServiceInfo: > > Map<String,Serializable> getMetadata(); > > Or else... you mean we should create the MetadataMap > class and replace those Map<String,Serializable> > references? Sounds like a good idea to me. yup
> > 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