这个序列化错误意味着什么,我该如何防止它?

时间:2011-07-28 18:59:14

标签: java eclipse gwt

我使用Eclipse在GWT 2.3中编码。虽然我有编码经验,但它仅限于客户端。我当前的项目涉及创建一个映射程序,该程序从Excel工作表中获取一个点列表并将它们放在预定义的图像上。现在,我连接了我的servlet和客户端代码,我已经知道了如何读取Excel文件。

我当前的问题:我使用开发模式在Firefox上加载应用程序时出现以下错误:

  

JSNI方法“int”返回了@com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader::readInt()以外的其他内容:未定义类型的JS值,预期int

开发模式的控制台在我运行时没有给我任何错误,它确实告诉我有一个[WARN]有两件我没有使用的东西(我错误命名的图像,但不会加载)。< / p>

目前,我的代码如下:

在我的Floor.java客户端代码中:

 MyServiceAsync service = (MyServiceAsync) GWT.create(MyService.class);
    AsyncCallback<String> callback = new AsyncCallback<String>() {
        public void onFailure(Throwable caught) {
            printerModel.setText("FAILED");
            String details = caught.getMessage();
            printerModel.setText(details);
        }
        @Override
        public void onSuccess(String result) {
            //I purposefully have this as an empty method so I could figure out the error

        }
    };

    service.readFile("PrinterList.xls", callback);

在我的MyService.java

>public String readFile(String s);

In `MyServiceImpl.java`:

>public String readFile(String s) {

        // TODO Auto-generated method stub
        try {
           } catch (Exception e) {
        }
        return "foo";
    }

我的AsyncCallback类型为String,这似乎导致错误。我的客户端代码调用的方法此时返回单个String,“fubar”(为简单起见)。我认为字符串是自动serializable,但我不确定。那么,如何让这个错误消失呢?如何使服务器代码序列化?

1 个答案:

答案 0 :(得分:1)

例外情况基本上是这样的:

客户端试图从数据流中读取对象。根据被调用方法的签名(或其他一些提示),流阅读器期待一个int但却找到了undefined

至于String的可串行性,您的假设是正确的。它们是可序列化的,您无需付出任何努力。

如果不查看代码和/或异常跟踪,就很难再说些什么了。


修改

你的代码对我来说似乎没问题。您是否有机会混合GWT版本?那就是你用2.3编译你的GWT应用程序,但服务器类路径包含一个旧的GWT jar(反之亦然)。看看:

  1. 项目GWT版本设置。项目 - &GT;属性 - &gt; Google - &gt; Web工具包。那里选择了哪个版本的GWT?
  2. 将GWT设置与项目进行比较 - &gt;属性 - &gt; Java构建路径 - &gt;库。你在那里看到多少个GWT相关的罐子?哪个版本?是否有多个gwt-servlet-x.y.jar?