我正在研究GWT and OSGi+PAX-Web问题的解决方案。特别的问题是GWT无法加载序列化策略文件,给出以下错误:
ERROR: The serialization policy file '/ctx/ctx/6ExxxxxxxxxxxxxxxxF.gwt.rpc' was not found; did you forget to include it in this deployment?
问题出在Equinox OSGi和PAX-WEB之间。
要找到解决方案,我想更好地了解GWT-RPC如何加载序列化策略文件。
(免责声明:我已经在生成的文件[2]上阅读了gwt文档。我正在寻找更多低级细节:我的印象是我们所遇到的错误必须处理HttpContext .getResource())
答案 0 :(得分:11)
全部在RemoteServiceServlet
。
他们的生命周期是什么?他们什么时候装? (我看到它是在服务器启动时。生命周期中的任何特殊情况?重新加载?)
它们在第一次使用时加载(第一次请求收到)并缓存在servlet的一个字段中,因此它们的生命周期与servlet本身的生命周期相关联。
GWT如何在其堆栈中加载此文件?在请求的调用堆栈中的什么位置? GWT如何知道从哪里加载它们?我可以告诉GWT它应该在哪里寻找这个文件吗?
servlet.getServletContext().getResourceAsStream
。您可以通过覆盖doGetSerializationPolicy
来自定义(如JavaDoc中所述)
文件名(资源URL)是根据请求的路径和X-GWT-Permutation
请求标头构建的。
答案 1 :(得分:4)
我在我的EAR文件中查找了.rpc文件,发现文件名与错误不同。
解决方案:清除浏览器缓存并刷新。
答案 2 :(得分:4)
答案提供了我的尼克为我工作。
我的网络应用程序长时间运行了一些课程。
后来我在服务器上添加了新类,当我尝试启动Web应用程序时,它给了我以下错误:
错误:序列化策略文件'/ newapp / C3055CD048198D732D03CA6901E503 没找到86.gwt.rpc';你忘了把它包含在这个部署中吗?
警告:无法获得SerializationPolicy'C3055CD048198D732D03CA6901E5038 6'对于模块'http://10.10.1.23:9200 / newapp /';将使用遗留的1.3.3兼容的序列化策略。您可能会遇到SerializationExceptions。
然后我在隐身窗口中启动了应用程序,清除了缓存并且它对我有效。