我创建了一个非常基本的应用程序。我只有一个服务类和一个相应的异步类,该类仅包含 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);
}
我知道我犯了一些愚蠢的错误。
我对 gwt rpc 和序列化机制很天真,但会尝试回答你的问题。
每当您编写涉及 RPC 的类时,GWT 都会创建一个Serialization Policy File
。序列化策略文件包含可以序列化的允许类型的白名单。
在您的服务方法中,您提到和引用的所有类型如果实现了,都将自动添加到此列表中IsSerializable http://google-web-toolkit.googlecode.com/svn/javadoc/2.5/com/google/gwt/user/client/rpc/IsSerializable.html。在您的情况下,您使用了以下两种方法,
public String getName();
public Date getJoiningDate();
这里你已经使用了String
and Date
作为您的返回类型,因此它被添加到您的Serialization Policy File
。但在下面的方法中他们存在一个问题,
public Object getAdditionalDetials(Arraylist<String> ids);
这里你已经使用了ArrayList and String
这不是问题,它们将被添加到您的白名单中,但问题是您提到的返回类型为Object
。这里GWT编译器不知道要添加到什么类型whitelist or Serialization Policy
因此它不会通过你的 RPC 调用。解决方案是使用提及一个实现的类IsSerializable http://google-web-toolkit.googlecode.com/svn/javadoc/2.5/com/google/gwt/user/client/rpc/IsSerializable.html而不是提及 type 的返回类型Object
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)