GWT RPC如何加载序列化策略文件?

时间:2012-06-21 14:25:59

标签: gwt gwt-rpc

我正在研究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如何加载序列化策略文件。

  • 他们的生命周期是什么?他们什么时候装? (我看到它是在服务器启动时。生命周期中的任何特性?重新加载?)
  • GWT如何在其堆栈中加载此文件?在请求的调用堆栈中的什么位置? GWT如何知道从哪里加载它们?我可以告诉GWT它应该在哪里寻找这个文件吗?

(免责声明:我已经在生成的文件[2]上阅读了gwt文档。我正在寻找更多低级细节:我的印象是我们所遇到的错误必须处理HttpContext .getResource())

3 个答案:

答案 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。

然后我在隐身窗口中启动了应用程序,清除了缓存并且它对我有效。