2012-03-01 29 views
5

我的GWT項目工作正常,但今天,經過一些更改並添加新的提示之後,一個 異步調用未執行。例外是「此應用程序出現日期爲 ,請點擊瀏覽器上的刷新按鈕。」所有其他 異步調用都會執行。IncompatibleRemoteServiceException:此應用程序已過期,請點擊瀏覽器上的刷新按鈕

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(); 
} 

AsyncInterface

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> 

有人幫我解決這個問題。

回答

7

如果在瀏覽器中運行的Javascript代碼與在服務器上部署的Javascript版本不同,則會引發此錯誤。在這種情況下,瀏覽器中的JavaScript代碼通過Async調用服務器上的方法,並且在服務器上該方法的參數或參數類型數量已更改,因此此方法不存在,因爲GWT服務器端無法找到具有該方法的方法由於服務器上的方法較新,因此參數或類型數量較多。如果瀏覽器仍然具有緩存的GWT Javascript,並且啓動瀏覽器時它不會從服務器加載新的JavaScript文件,但從緩存中獲取本地文件,則可能會發生這種情況。通過使用Ctrl-F5強制瀏覽器刷新瀏覽器中的本地緩存版本將消失,因爲將從服務器獲取新版本,並且應該修復此問題。在生產中,如果Web服務器或Java服務器的緩存設置未設置爲使nocache文件無效,則可能導致此問題。也http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html#perfect_caching

+0

@Hibrand Bouwkamp http://stackoverflow.com/a/9531020/1046176 – NewCodeLearner 2012-03-02 09:45:50

0

看到你的代碼進行服務器端更改後,您需要重新發起項目或重新加載web服務器。它會解決這個問題

1

錯誤可以通過一個解決的方法如下:

  1. 清除瀏覽器緩存
  2. 清算網絡服務器緩存
  3. 結算類文件和重建項目。您可以通過運行Maven的「清理」和「安裝」階段或Eclipse中的IntellijIdea和「項目 - >清理」菜單的「生成 - >重建項目」菜單來重建項目。
+0

第3步爲我工作。顯然,一些陳舊的文件造成了衝突。 – 2018-02-05 14:31:42