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.
(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())
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With