Mój projekt GWT działał dobrze, ale dzisiaj, po kilku zmianach i dodaniu nowych funkcji, jedno wywołanie asynchroniczne nie jest wykonywane. Wyjątkiem jest „Ta aplikacja jest nieaktualna, kliknij przycisk odświeżania w przeglądarce”. wszystkie inne wywołania asynchroniczne są wykonywane.

 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)

Klient :

     public void onClick(ClickEvent event) {

                            fService.getRepositories(repocallback);

        }
    });

Berło

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

    FCollection getRepositories();
 }

Interfejs asynchroniczny

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

Usługa

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

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

Serwer

 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>

Niech ktoś mi pomoże rozwiązać ten problem.

5
NewCodeLearner 1 marzec 2012, 20:35

3 odpowiedzi

Najlepsza odpowiedź

Ten błąd jest generowany, jeśli kod JavaScript uruchomiony w przeglądarce jest inną wersją niż JavaScript wdrożony na serwerze. W takim przypadku w kodzie JavaScript w przeglądarce wywołuje metodę na serwerze przez Async i liczba parametrów lub typy parametrów tej metody zmieniła się na serwerze ta metoda nie jest obecna, ponieważ strona serwera GWT nie może znaleźć metody z tym liczba parametrów lub typów, ponieważ metody na serwerze są nowsze. Może się tak zdarzyć, jeśli przeglądarka nadal ma bufor JavaScript GWT, a po uruchomieniu przeglądarki nie załaduje nowych plików JavaScript z serwera, ale pobierze pliki lokalne z pamięci podręcznej. Wymuszając przeglądarkę za pomocą Ctrl-F5, aby odświeżyć lokalną wersję z pamięci podręcznej w przeglądarce zniknie, ponieważ nowa wersja zostanie pobrana z serwera i ten problem powinien zostać naprawiony. W produkcji ten problem może być spowodowany, jeśli ustawienia pamięci podręcznej serwera WWW lub serwera java nie są ustawione na unieważnienie pliku nocache. Zobacz także http://code.google.com/webtoolkit/doc/latest /DevGuideCompilingAndDebugging.html#perfect_caching

7
Michael Gaskill 20 maj 2016, 04:11

Błąd można rozwiązać na jeden z następujących sposobów:

  1. Czyszczenie pamięci podręcznej przeglądarki.
  2. czyszczenie pamięci podręcznej serwera WWW
  3. czyszczenie plików klas i przebudowywanie projektu. Możesz przebudować swój projekt, uruchamiając fazy "czysty" i "instalacyjny" mavena lub menu "Buduj -> Odbuduj projekt" IntellijIdea i menu "Projekt -> Wyczyść" w Eclipse.
1
Gat 16 wrzesień 2017, 17:08

Po dokonaniu zmian po stronie serwera w kodzie należy ponownie uruchomić projekt lub ponownie załadować serwer WWW. Rozwiąże to problem

0
Anish 21 marzec 2013, 11:38