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

Reply via email to