Hey all,
This is both an FYI and a query to see if anyone has a solution to this
issue.
There seems to be a bug in Flash Remoting in the handling of
java.util.Map keys.
Setup:
Flex 1.5
Remoting configured with
<serialization>Flex</serialization>
<lowercase-keys>false</lowercase-keys>
The issue is that Map keys are always made lowercase. The issue appears
to be in the deserializing of objects of type 'ECMA Array' coming from
Flash.
To reproduce create a Java service:
public class RemotingService
{
public Map getMap()
{
Map map = new HashMap();
map.put("Uppercase Key", "value");
return map;
}
public Object echo(Object obj)
{
return obj;
}
}
Using these services in Flex to reproduce this bug as follows:
1. Call getMap() to get the map instance from the server
2. trace the map keys - the key will still be mixed case
3. Call echo() with the map as argument
4. trace the returned map keys - the key will be all lowercase
It seems to me that the Map contents should be able to round trip
without modification.
Turning on debugging in the gateway, I you can see that the type of the
map is 'ECMA Array'. There doesn't seem to be a way to create an ECMA
Array in ActionScript. You can only get one back from a Remoting call.
I need my Map key case to be preserved. The only workaround for this
issue I can think of is to clone the Map contents into an ActionScript
object before sending it back to the server:
var clone = {};
for (var p in map)
{
clone[p] = map[p];
}
This does work - the gateway debugging shows that this is now of type
'Object' which correctly becomes a Map with key case preserved in Java.
Anyone got any better ideas?
Alon
alon at carbonfive.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/