Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How GWT RPC loads the serialization policy files?

Tags:

gwt

gwt-rpc

I'm researching a solution for an issue with GWT and OSGi+PAX-Web. The particular problem is that GWT cannot load the serialization policy file, giving the following error:

ERROR: The serialization policy file '/ctx/ctx/6ExxxxxxxxxxxxxxxxF.gwt.rpc' was not found; did you forget to include it in this deployment?

The problem lies somewhere between Equinox OSGi and PAX-WEB.

To find a solution, I would like to better understand how GWT-RPC is loading the serialization policy files.

  • What is their lifecycle? When are they loaded? (I see it's on server startup. Any particularities in the lifecycle? Reload?)
  • How GWT loads this file in its stack? At what point in the call stack of a request? How does GWT knows where to load them from? Can I tell GWT where it should look for this file?

(disclaimer: I've read the gwt docs on the generated files [2]. I'm looking for more low-level details: I've the impressions that the error we are having has to deal with HttpContext.getResource())

like image 909
maasg Avatar asked Jun 21 '12 14:06

maasg


People also ask

What is GWT RPC file?

The GWT RPC framework makes it easy for the client and server components of your web application to exchange Java objects over HTTP. The server-side code that gets invoked from the client is often referred to as a service. The implementation of a GWT RPC service is based on the well-known Java servlet architecture.


3 Answers

It's all in RemoteServiceServlet.

What is their lifecycle? When are they loaded? (I see it's on server startup. Any particularities in the lifecycle? Reload?)

They're loaded on first use (first request received) and cached in a field of the servlet, so their lifecycle is tied to the one of the servlet itself.

How GWT loads this file in its stack? At what point in the call stack of a request? How does GWT knows where to load them from? Can I tell GWT where it should look for this file?

servlet.getServletContext().getResourceAsStream. You can customize this by overriding doGetSerializationPolicy (as said in the JavaDoc).
The file name (resource URL) is built from the request's path and X-GWT-Permutation request header.

like image 142
Thomas Broyer Avatar answered Sep 28 '22 04:09

Thomas Broyer


I looked for the .rpc file in my EAR file and found that the filename was different to the error.

Solution: cleared browser cache and refreshed.

like image 23
Nick Avatar answered Sep 28 '22 04:09

Nick


Answer provided my Nick worked for me.

I had my web app running with some classes for long time.

Later I have added new classes on the server and when I try to start the web app, it was giving me the following error:

ERROR: The serialization policy file '/newapp/C3055CD048198D732D03CA6901E503 86.gwt.rpc' was not found; did you forget to include it in this deployment?

WARNING: Failed to get the SerializationPolicy 'C3055CD048198D732D03CA6901E5038 6' for module 'http ://10.10.1.23:9200/newapp/'; a legacy, 1.3.3 compatible, serialization policy will be used. You may experience SerializationExceptions as a result.

Then I have started the app in incognito window, which clears the cache and it worked for me.

like image 41
Nikson Avatar answered Sep 28 '22 03:09

Nikson