IncompatibleRemoteServiceException: 此应用程序已过期,请单击浏览器上的刷新按钮

Posted

技术标签:

【中文标题】IncompatibleRemoteServiceException: 此应用程序已过期,请单击浏览器上的刷新按钮【英文标题】:IncompatibleRemoteServiceException: This application is out of date, please click the refresh button on your browser 【发布时间】:2012-03-01 16:35:28 【问题描述】:

我的 GWT 项目运行良好,但今天,经过一些更改并添加了新功能 不执行异步调用。例外是“此应用程序已退出 日期,请单击浏览器上的刷新按钮。”所有其他 执行异步调用。

 An IncompatibleRemoteServiceException was thrown while processing this call.
 com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: This application is out of date, please click the refresh button on your browser. ( Blocked attempt to access interface 'com.client.FInterface', which is not implemented by 'com.server.FServiceImpl'; this is either misconfiguration or a hack attempt )
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:252)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:206)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)

客户:

     public void onClick(ClickEvent event) 

                            fService.getRepositories(repocallback);

        
    );

界面

   @RemoteServiceRelativePath("init")
  public interface FInterface extends RemoteService    

    FCollection getRepositories();
 

异步接口

  public interface FInterfaceAsync 
void getRepositories(AsyncCallback<FCollection> repositoryCallback);

服务

   public class FService implements FInterfaceAsync 
FInterfaceAsync service =(FInterfaceAsync)GWT.create(FInterface.class);
ServiceDefTarget endpoint = (ServiceDefTarget) service;

    public FService()
    endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "init");
     
        

服务器

 public class FServiceImpl extends RemoteServiceServlet implements  FInterface 

       public FilnetFolderCollection getRepositories() 
        

 

XML:

   <servlet>
   <servlet-name>FServlet</servlet-name>
  <servlet-class>com.server.FServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
  <servlet-name>FServlet</servlet-name>
  <url-pattern>/FServiceImpl</url-pattern>
  </servlet-mapping>

有人帮我解决这个问题。

【问题讨论】:

【参考方案1】:

如果在浏览器中运行的 javascript 代码与部署在服务器上的 Javascript 版本不同,则会引发此错误。在这种情况下,浏览器中的 JavaScript 代码通过 Async 调用服务器上的方法,并且该方法的参数数量或参数类型在服务器上发生了更改,因为 GWT 服务器端找不到具有该方法的方法,所以该方法不存在参数或类型的数量,因为服务器上的方法较新。如果浏览器仍然缓存了 GWT Javascript,并且当您启动浏览器时,它不会从服务器加载新的 JavaScript 文件,而是从缓存中获取本地文件,则可能会发生这种情况。通过使用 Ctrl-F5 强制浏览器刷新浏览器中的本地缓存版本将消失,因为将从服务器检索新版本,并且应该修复此问题。在生产中,如果 webserver 或 java 服务器的缓存设置未设置为使 nocache 文件无效,则可能会导致此问题。另见http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html#perfect_caching

【讨论】:

【参考方案2】:

可以通过以下方式之一解决该错误:

    清除浏览器缓存 清除网络服务器缓存 清除类文件并重建您的项目。您可以通过运行 maven 的“clean”和“install”阶段或 IntellijIdea 的“Build -> Rebuild Project”菜单和 Eclipse 中的“Project -> Clean”菜单来重建项目。

【讨论】:

第 3 步对我有用。显然是一些陈旧的文件导致了冲突。【参考方案3】:

在您的代码中进行服务器端更改后,您需要重新启动项目或重新加载网络服务器。这将解决问题

【讨论】:

以上是关于IncompatibleRemoteServiceException: 此应用程序已过期,请单击浏览器上的刷新按钮的主要内容,如果未能解决你的问题,请参考以下文章