同时使RPC调用序列化异常(Serialization Exception while making

2019-08-06 16:10发布

我创建了一个非常基本的应用程序。 我只有一个服务类仅包含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);
}

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

Answer 1:

我在GWT RPC和序列化机制幼稚,但会尽量回答你的问题。

当你写一个涉及RPC类,GWT创建一个Serialization Policy File 。 序列化策略文件包含允许的类型可序列化的白名单。

在您的服务方法,你别说,并参照类型时,自动将它们实现添加到这个列表IsSerializable 。 在你的情况,你已经使用以下两种方法,

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

在这里,你已经使用StringDate作为您的返回类型,因此它被添加到您的Serialization Policy File 。 但在下面的方法,他们的谎言一个问题,

public Object getAdditionalDetials(Arraylist<String> ids);

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



Answer 2:

FWIW,我是有这个问题,但我的“对象”型藏泛型类的后面

所以,如果你的RPC方法之一涉及一类:

class Xxx<T> implements IsSerializable {...

它需要更改为:

class Xxx<T extends IsSerializable> implements IsSerializable {...


文章来源: Serialization Exception while making an RPC call
标签: gwt gwt-2.5