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的主要内容,如果未能解决你的问题,请参考以下文章