相同源的第二次编译会生成不同的gwt.rpc文件集

我想跟进这个问题gwt-serialization-policy-hosted-mode-out-of-sync。 简而言之 - 当我从托管浏览器执行RPC时,此调用将在服务器上失败,并发生异常。

    INFO: GwtRpcEventSrvc: ERROR: The serialization policy file '/84EC7BA65AF8175BAA99B47877FDE163.gwt.rpc' was not found; did you forget to include it in this deployment?
    SEVERE: GwtRpcEventSrvc: WARNING: Failed to get the SerializationPolicy '84EC7BA65AF8175BAA99B47877FDE163' for module 'http://host:19980/MYAPP/'; a legacy, 1.3.3 compatible, serialization policy will be used.  Youmay experience SerializationExceptions as a result.
    SEVERE: Exception while dispatching incoming RPC call

当我从浏览器执行相同的RPC时,请求将在服务器上成功执行。

另外,我观察到GWT编译器的一个奇怪行为,可能导致托管浏览器模式出现问题。

我假设当我做了两个完全相同的代码的后续编译,那么单个编译的结果应该是相同的。 我的意思是至少xxxxx.html和yyyyy.gwt.rpc文件必须相同。 (其中,xxxxx和yyyyy是84EC7BA65AF8175BAA99B47877FDE163等较长的数字。)

目前我有两个版本的项目。

  • 由GWT 1.7编译的旧项目不会遇到gwt-serialization-policy-hosted-mode-out-of-sync中描述的托管浏览器问题
  • 一个由GWT 2.0.4编译的新项目。 这个新项目是基于旧项目。 此项目遭受托管的浏览器问题。
  • 案例1:使用GWT的旧项目1.7

    我拿走了由GWT 1.7编译的旧项目。 我做了两个编译,我比较了编译的工件。 gwt.rpc文件相同,html文件具有不同的内容和名称 。 由于gwt.rpc文件是相同的,我没有托管浏览器的问题。

    案例2:使用GWT 2.0.4的新项目

    我编译了两次, gwt.rpc和html文件都不一样 。 因此,托管浏览器中的RPC调用由于缺少gwt.rpc文件而在服务器上失败。

    案例3:使用GWT 2.0.4的旧项目

    我编译了两次, gwt.rpc和html文件都不一样 。 因此,托管浏览器中的RPC调用由于缺少gwt.rpc文件而在服务器上失败。

    我做了一些调查,发现当我从一个服务器发送到客户端的类数据中注释掉一个数据成员时,编译后的文件开始是相同的。

        class Data implements IsSerializable {
               List<IsSerializable> data;
               ...
        }
    
  • 我想在新项目中做同样的事情,但似乎有很多类需要修改。 因此,随着项目的增长,问题在增加。
  • 我不知道用什么来代替

    List<IsSerializable> data;
    

    传输数据。


  • 您需要阅读更多关于GWT序列化策略的信息:

    可串行化类型

    通常情况下,除非您将高级RPC调用直接发送到服务器,否则不会与.rpc文件混合。

    您的可序列化对象:

    class Data implements IsSerializable {
          List<IsSerializable> data;
           ...
    }
    

    如果以下所有条件都适用,则用户定义的类是可序列化的:它可分配给IsSerializable或Serializable,因为它直接实现了其中一个接口,或者因为它来自一个超类,它执行所有非最终的非瞬时实例字段本身就是可序列化的,而且对于GWT 1.5,它必须有一个默认(零参数)构造函数(带有任何访问修饰符)或根本没有构造函数。

    所以你可能应该有这样的东西:

    class Data implements IsSerializable {
          List<YOUR_TYPE> data;
           ...
    }
    

    你的列表的模板是一个类型,你不会设置'IsSerializable'...它应该是这样的:

    List<int> data;
    
    链接地址: http://www.djcxy.com/p/51069.html

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

    下一篇: GWT + Spring hosted mode not working