Tuesday, March 26, 2013

SerializationException: Invalid type signature for com.google.appengine.api.datastore.Key

I am receiving this error during RPC:

SEVERE: javax.servlet.ServletContext log: actionServlet: An IncompatibleRemoteServiceException was thrown while processing this call.
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: Invalid type signature for com.google.appengine.api.datastore.Key
...
Caused by: com.google.gwt.user.client.rpc.SerializationException: Invalid type signature for com.google.appengine.api.datastore.Key

Environment:
  • GWT 2.5.0
  • AppEngine 1.7.4
  • Objectify 4.0.b1
  • JDK 1.6.0_33
According to this GWT documentation, an IncompatibleRemoteServiceException is described as:

Another type of failure can be caused by an incompatibility between the client and the server. This most commonly occurs when a change to a service implementation is deployed to a server but out-of-date clients are still active. For more details please see IncompatibleRemoteServiceException.

When the client code receives an IncompatibleRemoteServiceException, it should ultimately attempt to refresh the browser in order to pick up the latest client.

According to this thread and this thread this type of error is typically caused when the class definition on the client is out of sync with the server version. There are examples of this type of error all over the internet, However I cannot seem to find a single reference to this error occurring with the GWT Key class

What I've done to try to solve the problem:
  • Clear browser cache from the beginning of time
  • Delete compiled class files in war/project_name
  • Delete gwt-UnitCache
  • Ensure that GWT compiled classes are war/project_name
  • GWT-Compile the application
  • Start the development server
  • Ctrl + F5 reload the application
Additional Information:

The RPC is executed through a command pattern RPC: 

@RemoteServiceRelativePath("action")
public interface ActionService extends RemoteService {
<T extends Result> T execute(Action<T> action) throws Exception; 
}
 
This RPC call is working throughout the application, except for when trying to transport an action that contains an entity which includes a field of type com.googlecode.objectify.Key. However, the error indicates that the out-of-sync class is com.google.appengine.api.datastore.Key. The com.googlecode.objectify.Key includes inside of it a raw com.google.appengine.api.datastore.Key. Both Keys implement java.io.Serializable and should be safe for RPC.

Any thoughts or suggestions?

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments:

Post a Comment