1

我创建了一个非常基本的应用程序。我只有一个服务类和一个相应的 Async 类,它只包含 Java 类型而没有自定义类。但我仍然得到序列化异常。

我的服务类看起来像这样。

public interface MyService extends RemoteService {
  public String getName();
  public Object getAdditionalDetials(ArrayList<String> ids);
  public Date getJoiningDate();
}

我的异步界面看起来像这样

public interface MyServiceAsync {
  public void getName(AsyncCallback<String> callback);
  public void getAdditionalDetials(ArrayList<String> ids, AsyncCallback<Object> callback);
  public void getJoiningDate(AsyncCallback<Date> callback);
}

我知道我犯了一些愚蠢的错误。

4

2 回答 2

1

我对 gwt rpc 和序列化机制很幼稚,但会尝试回答您的问题。

每当您编写涉及 RPC 的类时,GWT 都会创建一个Serialization Policy File. 序列化策略文件包含可以序列化的允许类型的白名单。

在您的 Service 方法中,如果您提到和引用的所有类型都实现了IsSerializable. 在您的情况下,您使用了以下两种方法,

public String getName();
public Date getJoiningDate();

在这里,您使用StringandDate作为您的返回类型,因此它被添加到您的Serialization Policy File. 但是在下面的方法中,他们存在一个问题,

public Object getAdditionalDetials(Arraylist<String> ids);

在这里您使用ArrayList and String了这不是问题,它们将被添加到您的白名单中,但问题是您提到返回类型为Object. 在这里,GWT 编译器不知道要添加什么类型whitelist or Serialization Policy,因此它不会通过您的 RPC 调用。解决方案是使用提及实现的类而IsSerializable不是提及类型的返回类型Object

于 2013-01-13T12:12:52.803 回答
0

FWIW,我遇到了这个问题,但我的“对象”类型隐藏在泛型类后面

因此,如果您的 rpc 方法之一涉及一个类:

class Xxx<T> implements IsSerializable {...

它需要更改为:

class Xxx<T extends IsSerializable> implements IsSerializable {...
于 2013-05-22T05:10:04.547 回答