On Jul 14, 12:31 am, Thad <[email protected]> wrote: > I see references to problems with serializing Map objects across the > RPC layer. From what I read, folks have a lot of trouble with this, > but that is should work. Well, it's not working for me. > > I have an application to which I wish pass the parsed query string to > the server, as in MyAppl.html?foo=bar&eanie=meanie > In client/MyAppl.java I call > Map<String, List<String>> paramMap = Window.Location.getParameterMap > (); > > Now I call myService.execute(paramMap, callback). This fails, whether > passed as a Map or as "new HashMap(paramMap)". The first line in my > service is a System.out.println() and it never gets called. I'm > tossed right into my callback's onFailure() method. (The Throwable's > getMessage() is "[ERROR] java.util.Collections > $UnmodifiableRandomAccessList > com.google.gwt.user.client.rpc.SerializationException: > java.util.Collections$UnmodifiableRandomAccessList"). > > What gives? A HashMap implements serializable. The keys are Strings > and the value is a List of Strings. > > Why won't this serialize?
That is a good question... It is because the java.util.Collections$UnmodifiableRandomAccessList class is not supported for serialization, it it correct that the call will never reach your servlet. Imo, it shouldn't even compile if this is intended behavior. That said, according to the docs at http://code.google.com/webtoolkit/doc/1.6/RefJreEmulation.html#Package_java_util the Collections.unmodifiableList(List) method _is_ supported, which makes it doubly odd that it's result won't serialize. The workaround is doing a deep copy of your UnmodifiableHashMap, instead of the shallow copy you do with the copy constructor. Go for: HashMap copy = new HashMap(); for (Entry<String, List<String>> e : paramMap.entrySet()) { copy.put(e.getId(), new ArrayList(e.getValue()); } Regards, Gert --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---
