com.google.gwt.user.client.rpc.SerializationException

35 views
Skip to first unread message

Deepak Singh

unread,
Sep 10, 2012, 12:47:56 PM9/10/12
to google-we...@googlegroups.com, google-a...@googlegroups.com, objectify...@googlegroups.com
Hi All,


I have a deployed running application in following environment GWT 2.5RC1, GAE 1.7.0, Objectify 3.x

I deleted all previous data from DB.  Now for some reason, i changed the class names of my entities. 
All code remains same.

Here i have a entity with new name as follows

@Unindexed
public class PackageEnquiryEntity implements Serializable {
/**
*/
private static final long serialVersionUID = -8667552679106180269L;

public PackageEnquiryEntity() {
}
@Id Long id;
@Indexed private String userIdAsEmail;
@Indexed private Date enquiryDate;


I am returning List<PackageEnquiryEntity> through many RPC calls.
Everything works fine in development mode. No issue.
But in production mode on GAE, i am getting SerializationException through some of RPC calls while some RPC calls works fine with the same entity.

I am confused why it fails in production. Everything was working fine in production also before changing the class names of entity.

Here are the exception details

javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'com.pdstechi.commonmodule.shared.holiday.PackageEnquiryEntity' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = com.pdstechi.commonmodule.shared.holiday.PackageEnquiryEntity@d8a125
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:665)
	at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
	at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:44)
	at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:39)
	at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.java:51)
	at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.java:28)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:786)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:667)
	at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:585)
	at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:605)
	at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:471)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:563)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:102)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
	at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
	at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
	at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:447)
	at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:452)
	at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:458)
	at com.google.tracing.TraceContext.runInContext(TraceContext.java:698)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:336)
	at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:328)
	at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:456)
	at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
	at java.lang.Thread.run(Thread.java:679)



Thanks
Deepak Singh

Jordi P.S.

unread,
Sep 12, 2012, 1:15:26 PM9/12/12
to objectify...@googlegroups.com, google-we...@googlegroups.com, google-a...@googlegroups.com

Hi.

This is not a datastore problem at all, it is a GWT issue.
GWT does not compile all classes to JS, only the ones willing to be used in the UI. Those are listed in a serialization whitelist. Your class is just not in the list.
Normally this is done automatically by scanning the RPC. Sometimes is not done if you use this class for example as a generic. You can force the whitelisting by implementing the IsSerializable interface. If this still not work, it might be the case, you have to create dummy methods in your RPC.
  public void dummy(PackageEnquiryEntity entity); 
This way the autoscan of the RPC is going to add this class to the white list. There isn't any other way to do so.

BTW, using persistent beans for your presentation layer is usally not a good practice.

Hope it helps,
Jordi.
Reply all
Reply to author
Forward
0 new messages