serialization error InvocationException with java.util.List member

11 views
Skip to first unread message

hhale21

unread,
Sep 13, 2007, 11:23:57 PM9/13/07
to Google Web Toolkit
I have a problem with serialization and have narrowed down the problem
to the following.
If I try to serialize a class the contains a ListI get an
InvocationException exception with the message
"the call falied on the server, see the server log for details"

The log is empty. Testing this in hosted mode.

Does GWT serialization support the following or I am doing something
incorrect?

// Test1.java
package com.mycompany.ui.client;

import java.util.List;

import com.google.gwt.user.client.rpc.IsSerializable;

public class Test1 implements IsSerializable
{
public Test1()
{
}

/** try with and with this, not difference.
* @gwt.typeArgs <com.mycompany.ui.client.Test2>
*/
private List featureGroupMembers;

public List getFeatureGroupMembers()
{
return featureGroupMembers;
}

public void setFeatureGroupMembers(List featureGroupMembers)
{
this.featureGroupMembers = featureGroupMembers;
}

}

============================================================================
// Test2.java

package com.mycompany.ui.client;

import com.google.gwt.user.client.rpc.IsSerializable;

public class Test2 implements IsSerializable
{
private String featureName;
private boolean allowPartialAccess;

public Test2()
{
}

public String getFeatureName()
{
return featureName;
}
public void setFeatureName(String featureName)
{
this.featureName = featureName;
}
public boolean isAllowPartialAccess()
{
return allowPartialAccess;
}
public void setAllowPartialAccess(boolean allowPartialAccess)
{
this.allowPartialAccess = allowPartialAccess;
}
}

Maciej Matecki

unread,
Sep 14, 2007, 2:55:31 AM9/14/07
to Google Web Toolkit
On 14 Wrz, 05:23, hhale21 <hhal...@yahoo.com> wrote:
> I have a problem with serialization and have narrowed down the problem
> to the following.
> If I try to serialize a class the contains a ListI get an
> InvocationException exception with the message
> "the call falied on the server, see the server log for details"

Try to change the logLevel to WARN you should see more in logs. Can
you show your RPC interface?
Regards,
Maciej Matecki

hhale21

unread,
Sep 14, 2007, 10:10:24 AM9/14/07
to Google Web Toolkit
BTW this is with 1.4.60

Service is just

/**
* @gwt.typeArgs <'com.mycompany.ui.client.Test1>
*/
List getTest1();


Turning on warning shows...

Caused by: com.google.gwt.user.client.rpc.SerializationException: Type
'com.mycompany.server.dao.Test2Bean was not included in the set of
types which can be serialized by this SerializationPolicy. For
security purposes, this type will not be serialized.


com.mycompany.server.dao.Test2Bean is in fact not in the .gwt.rpc
file, nor should it be. It is in another jar (not the the gwt
project).
It does not implement IsSerializable because is it is never
serialized. It used in the service when transfering from internal
beans to gwt serializable beans using Dozer (bean mapping tool).

Basically Test1 contains a list of Test2. Both implement
IsSerializable. (see my previous post)
Test1Bean contains a list Test2Bean. Dozer is used to convert
Test1Bean to Test1 and the contained list of Test2Bean to Test2

If I remove the call to the Dozer mapper, the rpc works. Dozer is
somehow confusing the GWT.

hhale21

unread,
Sep 14, 2007, 10:47:23 AM9/14/07
to Google Web Toolkit
The .gwt.rpc file


com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException,
true
com.mycompany.project.client.Test1, true
com.mycompany.project.client.Test2, true
java.lang.String, true
java.util.ArrayList, true
java.util.Vector, true


The entire stack for the log window

[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
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)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:
187)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
Caused by: 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.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:
357)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
390)
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.client.rpc.core.java.util.Vector_CustomFieldSerializer.serialize(Vector_CustomFieldSerializer.java:
46)
Caused by: java.lang.reflect.InvocationTargetException: null
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.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:
357)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
390)
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.client.rpc.core.java.util.Vector_CustomFieldSerializer.serialize(Vector_CustomFieldSerializer.java:
46)
Caused by: com.google.gwt.user.client.rpc.SerializationException: Type
'com.mycompany.project.server.Test2Bean' 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
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.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:
357)
at
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
390)
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)

hhale21

unread,
Sep 14, 2007, 11:00:37 AM9/14/07
to Google Web Toolkit
Last be of bit info to reproduce this....

This is the server method

============================================================================
import net.sf.dozer.util.mapping.DozerBeanMapper;
import net.sf.dozer.util.mapping.MapperIF;

public class rpctestImpl extends RemoteServiceServlet implements
rpctest {

@Override
public List rpccall()
{
Test2Bean t2 = new Test2Bean();
t2.setS("hello");
List<Test2Bean> t2list = new Vector<Test2Bean>();
t2list.add(t2);
Test1Bean t1 = new Test1Bean();
t1.setTest2(t2list);
t1.setS("xx");

// removing the code (in particular the use of Dozer) from here on
and returning null and the error goes away.

MapperIF mapper = new DozerBeanMapper();

Test1 destObj = (Test1) mapper.map(t1, Test1.class);

List result = new Vector();
result.add(destObj);


return result;
}
}
=========================================================
OR removing List test2 from Test1 and leaving the Dozer in works
also.


package com.mycompany.project.client;

import java.util.List;

import com.google.gwt.user.client.rpc.IsSerializable;

public class Test1 implements IsSerializable
{
public Test1()
{
}

// /**
// * @gwt.typeArgs <com.mycompany.project.client.Test2>
// */
// private List test2;
//
//
// public List getTest2()
// {
// return test2;
// }
//
// public void setTest2(List test2)
// {
// this.test2 = test2;
// }

private String s;

public String getS()
{
return s;
}

public void setS(String s)
{
this.s = s;
}
}

Reply all
Reply to author
Forward
0 new messages