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

我正在研究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它应该在哪里查找这个文件?
  • (免责声明:我已经阅读了关于生成文件的gwt文档[2]。我正在寻找更多低级细节:我有我们遇到的错误必须处理HttpContext.getResource()的印象)


    全部在RemoteServiceServlet

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

    它们在第一次使用时(首次接收到请求)加载并缓存在servlet的一个字段中,所以它们的生命周期与servlet本身的一个绑定在一起。

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

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


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

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


    提供的答案我的尼克为我工作。

    我有我的网络应用程序长时间运行一些类。

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

    错误:未找到序列化策略文件'/ newapp / C3055CD048198D732D03CA6901E503 86.gwt.rpc'; 你忘了把它包含在这个部署中吗?

    警告:无法为模块http://10.10.1.23:9200 / newapp /'获取SerializationPolicy'C3055CD048198D732D03CA6901E5038 6'; 将使用传统的兼容1.3.3的序列化策略。 作为结果,您可能会遇到SerializationException。

    然后,我在隐身窗口中启动了应用程序,清除了缓存并为我工作。

    链接地址: http://www.djcxy.com/p/51071.html

    上一篇: How GWT RPC loads the serialization policy files?

    下一篇: Second compilation of same sources produces different set of gwt.rpc files