com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException
Posted
技术标签:
【中文标题】com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException【英文标题】: 【发布时间】:2011-05-26 05:47:02 【问题描述】:我的 GWT 应用程序有问题。我部署在 Jetty 服务器上并运行。但是当我执行服务器调用(GWT 的服务器包上的类)时,服务器返回一条错误消息。消息是:
7|0|6|http://localhost/zbapp/zb_app/|A31E1254E17F9AD731856D6BE34124A2|main.java.com.gwt.app.client.GreetingService|greetServer|java.lang.String/2004016611||1|2|3|4|2|5|5|6|6|
//EX[2,1,["/3936916533","This application is out of date, please click the refresh button on your browser. ( Expecting version 5 from client, got 7. )"],0,5]
但是,服务器返回一个 200 代码就可以了。
我已经更新了浏览器,清理了浏览器缓存并重新编译了应用程序,但它没有运行。有什么解决办法?
提前致谢!
问候!
【问题讨论】:
【参考方案1】:您的客户端是最新的,因为它使用 GWT-RPC 协议的版本 7 发送请求,但服务器需要版本 5。检查您是否部署了正确版本的 gwt-servlet.jar,和/或您没有'在您的服务器类路径中没有旧版本可以用来代替您的 webapp 中的旧版本。
更具体地说,当您的客户端代码已使用 GWT 2.1 或更高版本(协议版本 7)编译时,您有一个来自 GWT 1.5 和 2.0(GWT-RPC 协议的版本 5)的 gwt-servlet.jar。
【讨论】:
我也遇到了这个错误。首先,你如何知道你的客户端和服务器端哪个版本的RPC版本是兼容的,你如何改变它? 这很简单:你必须在两边使用完全相同的 GWT 版本;和您的应用程序完全相同的版本(不过有一些方法可以解决这个问题;它与序列化策略有关) 好吧,我在 Eclipse 上安装了 GWT 插件并从头开始开发这个项目。作为单一安装,我没有理由相信客户端和服务器应该不兼容。但是,我收到的消息与上面的问题相同。我在eclipse中以开发模式运行它并使用chrome进行调试。IncompatibleRemoteServiceException
有很多含义。创建一个包含尽可能多的信息的新问题。
当然!给你 :) ***.com/questions/16334076/…【参考方案2】:
问题已解决(至少我的版本)
错误: 处理此调用时抛出异常:未知方法 -> 异常:com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException 消息:此应用程序已过期,请单击浏览器上的刷新按钮。 (期待客户端的版本 5,得到了 7。)
解决方案: 查找哪个依赖项正在拉入 gwt-user 模块(jar),因为这可能是问题的原因。首先验证删除 您的 LIB 文件夹中的 gwt-user jar 修复了问题,然后您还可以修改您的 Maven 以使用 EXCLUDE for 'gwt-user',如下所示:
<dependency>
<groupId>com.google.gwt.google-apis</groupId>
<artifactId>gwt-visualization</artifactId>
<version>1.0.2</version>
<exclusions>
<exclusion>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
</exclusion>
</exclusions>
</dependency>
【讨论】:
【参考方案3】:我更改了库,错误消失了。但是,错误发生了变化。现在我的错误是:
//EX[2,1,["com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","Could not locate requested interface 'main.java.com.gwt.app.client.GreetingService' in default classloader"],0,7]
但是接口在类加载器中。
然后,需要从 HttpServlet 覆盖方法“服务”:
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
// Cache the current thread
Thread currentThread = Thread.currentThread();
// We are going to swap the class loader
ClassLoader oldContextClassLoader =
currentThread.getContextClassLoader();
currentThread.setContextClassLoader(this.getClass().getClassLoader());
super.service(req, resp);
currentThread.setContextClassLoader(oldContextClassLoader);
因此,应用程序在 Equinox 上运行!!
【讨论】:
以上是关于com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException的主要内容,如果未能解决你的问题,请参考以下文章