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.
3 odpowiedzi
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
Błąd można rozwiązać na jeden z następujących sposobów:
- Czyszczenie pamięci podręcznej przeglądarki.
- czyszczenie pamięci podręcznej serwera WWW
- 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.
Po dokonaniu zmian po stronie serwera w kodzie należy ponownie uruchomić projekt lub ponownie załadować serwer WWW. Rozwiąże to problem
Podobne pytania
Powiązane pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].