SerializationException: Type 'java.util.HashMap' was not included - GWT 1.4

125 views
Skip to first unread message

Archer

unread,
Oct 28, 2008, 4:05:33 PM10/28/08
to Google Web Toolkit
Hello,
I'm annotating a method, using typeArgs, which returns a list of maps
and am getting a SerializationException that tells me
'java.util.HashMap' was not included in the sererialization policy.
(Stack trace below). I'm unsure exactly how to represent a list of
maps and have tried both
* @gwt.typeArgs <java.lang.String>
And
* @gwt.typeArgs <java.lang.String,java.lang.String>

However, neither seems to be picked up. Any ideas what's wrong?

public interface IAccessCoursesService extends RemoteService {
/**
* @gwt.typeArgs <java.lang.String,java.lang.String>
*/
List getHomeAreas();
}

public class AccessCoursesServiceImpl extends RemoteServiceServlet
implements IAccessCoursesService {
public List getHomeAreas() {
Map map;
List list = new ArrayList();

ILearningManagementSystemMembership[] lmss =
(ILearningManagementSystemMembership[])getLMSWrapper().findDomainObjects(person,
null);
for (int i = 0; i < lmss.length; i++) {
map = new HashMap();
ILearningManagementSystemMembership lms = lmss[i];
map.put(IAccessCoursesService.HOME_AREA_NAME,
lms.getLearningManagementSystem().getName());
parseHomeArea(lms.getHomeAreaXML(), map);
list.add(map);
}

return list;
}
}

[WARN] StandardContext[]Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException:
java.lang.reflect.InvocationTargetException
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:
424)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
384)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
333)
at
com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
81)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
259)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:574)
at
com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:
442)
at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
530)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
265)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:
187)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
Caused by: java.lang.reflect.InvocationTargetException: null
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:
409)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
384)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
333)
at
com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
81)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
259)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:574)
at
com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:
442)
at
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:
530)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
265)
Caused by: com.google.gwt.user.client.rpc.SerializationException: Type
'java.util.HashMap' was not included in the set of types which can be
serialized by this SerializationPolicy. For security purposes, this
type will not be serialized.
at
com.google.gwt.user.server.rpc.impl.StandardSerializationPolicy.validateSerialize(StandardSerializationPolicy.java:
79)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
331)
at
com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
81)
at
com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:
46)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:
409)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
384)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
333)
at
com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
81)

Ian Petersen

unread,
Oct 28, 2008, 5:09:22 PM10/28/08
to Google-We...@googlegroups.com
On Tue, Oct 28, 2008 at 4:05 PM, Archer <dfdum...@gmail.com> wrote:
> I'm annotating a method, using typeArgs, which returns a list of maps
> and am getting a SerializationException that tells me
> 'java.util.HashMap' was not included in the sererialization policy.
> (Stack trace below). I'm unsure exactly how to represent a list of
> maps and have tried both
> * @gwt.typeArgs <java.lang.String>
> And
> * @gwt.typeArgs <java.lang.String,java.lang.String>
>
> However, neither seems to be picked up. Any ideas what's wrong?

The typeArgs annotation was a poor-man's implementation of Java 5
generics. What you want is

@gwt.typeArgs <java.util.Map<java.lang.String, java.lang.String>>

or, if you know it's always going to be HashMap, you might get tighter
output with

@gwt.typeArgs <java.util.HashMap<java.lang.String, java.lang.String>>

You'd also benefit from upgrading to GWT 1.5, if possible.

Ian

Archer

unread,
Oct 29, 2008, 1:32:23 PM10/29/08
to Google Web Toolkit
Thanks, your explanation solved my problem! Using the HashMap
declaration saved about 100 KB overall (~9%) - I owe you. ;^)

--Dave

On Oct 28, 2:09 pm, "Ian Petersen" <ispet...@gmail.com> wrote:
Reply all
Reply to author
Forward
0 new messages