9

我正在研究GWT 和 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() 的错误)

4

3 回答 3

11

都在RemoteServiceServlet

它们的生命周期是什么?他们什么时候加载?(我看到它在服务器启动时。生命周期中的任何特殊性?重新加载?)

它们在第一次使用时加载(收到第一个请求)并缓存在 servlet 的一个字段中,因此它们的生命周期与 servlet 本身相关联。

GWT 如何将这个文件加载到它的堆栈中?在请求的调用堆栈中的哪一点?GWT 如何知道从哪里加载它们?我可以告诉 GWT 它应该在哪里寻找这个文件吗?

servlet.getServletContext().getResourceAsStream. 您可以通过覆盖来自定义它doGetSerializationPolicy(如 JavaDoc 中所述)。
文件名(资源 URL)是根据请求的路径和X-GWT-Permutation请求标头构建的。

于 2012-06-21T14:37:16.240 回答
4

我在我的 EAR 文件中查找 .rpc 文件,发现文件名与错误不同。

解决方法:清除浏览器缓存并刷新。

于 2013-02-08T01:20:50.543 回答
4

答案是我的尼克为我工作。

我的网络应用程序在某些类中运行了很长时间。

后来我在服务器上添加了新类,当我尝试启动网络应用程序时,它给了我以下错误:

错误:未找到序列化策略文件'/newapp/C3055CD048198D732D03CA6901E503 86.gwt.rpc';您是否忘记将其包含在此部署中?

警告:无法获取模块“http://10.10.1.23:9200/newapp/”的序列化策略“C3055CD048198D732D03CA6901E5038 6”;将使用与 1.3.3 兼容的旧版序列化策略。因此,您可能会遇到 SerializationExceptions。

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

于 2013-09-10T18:40:51.880 回答