GWT RPC 警告检查所有子类型

Posted

技术标签:

【中文标题】GWT RPC 警告检查所有子类型【英文标题】:GWT RPC warn Checking all subtypes 【发布时间】:2012-08-29 11:58:15 【问题描述】:

我有一个 gwt 应用程序,在编译过程中出现错误:

扫描其他依赖项:file:/D:/projects/healthplanel_trunk/clinics-gwt-client/src/com/clinics/gwt/shared/UserServiceAsync.java 计算“com.clinics.gwt.shared.UserService”的所有可能的重新绑定结果 重新绑定 com.clinics.gwt.shared.UserService 调用生成器 com.google.gwt.user.rebind.rpc.ServiceInterfaceProxyGenerator 为远程服务接口“com.clinics.gwt.shared.UserService”生成客户端代理 分析“com.clinics.gwt.shared.UserService”的可序列化类型 分析方法: 公共抽象 com.clinics.gwt.shared.query.GQueryResult listAdmins(com.clinics.gwt.shared.query.GQueryParams queryParams) 参数:com.clinics.gwt.shared.query.GQueryParams queryParams com.clinics.gwt.shared.query.GQueryParams 验证实例化 com.clinics.gwt.shared.query.GQueryParams 分析符合序列化条件的“com.clinics.gwt.shared.query.GQueryParams”类型的字段 私有 java.util.List> 过滤器 java.util.List> 验证实例化 java.util.Vector> 检查'java.util.Vector>'的参数 检查类型“java.util.Vector”的类型参数 0,因为它直接在此类型或其子类型之一中公开 com.clinics.gwt.shared.query.GFilterBy 验证实例化 com.clinics.gwt.shared.query.GFilterBy 检查 'com.clinics.gwt.shared.query.GFilterBy' 的参数 检查类型 'com.clinics.gwt.shared.query.GFilterBy' 的类型参数 0,因为它直接在此类型或其子类型之一中公开 java.io.Serializable 验证实例化 java.util.HashMap [WARN] 检查所有符合序列化条件的 Object 子类型

我的代码是:

public class GQueryParams implements IsSerializable 
private static final long serialVersionUID = 1L;
private int offset = 0;
private int maxCount = -1; // -1 means all
private ArrayList<GOrderBy> orders = new ArrayList<GOrderBy>();
private ArrayList<NoSqlOrderBy> noSqlOrders = new ArrayList<NoSqlOrderBy>();
private ArrayList<GFilterBy<?>> filters = new ArrayList<GFilterBy<?>>();

还有:

public class GFilterBy<T extends Serializable> implements Serializable 
private static final long serialVersionUID = 1L;
private String id;
private GFilterOperation operation;
private T value;

怎么了,你能帮帮我吗?

【问题讨论】:

【参考方案1】:

GFilterBy&lt;?&gt; 基本上接受所有内容(实现Serializable 的所有内容),因此生成器必须扫描整个类路径以查找每个适用的类并为每个类生成适当的序列/反序列化代码。

这通常不是您想要的,因此会发出警告。

经验法则是在使用 GWT-RPC 通过网络发送的类型中始终尽可能具体;而? 显然违反了这条规则。

【讨论】:

非常感谢您的回答。但是,如果我在一个类中使用 'GFilterBy' 和 'GFilterBy' 怎么办?在这种情况下我应该使用哪种泛型类型? 你最好重构你的代码,这样你就不需要instanceof来处理这些值(例如,将2个字段添加到非泛型GFilterBy类:String strValue; Boolean boolValue,可能添加另一个字段告诉您使用哪个值字段,或检查每个值字段中的null),或至少将instanceof 使用限制在您自己的类中(即创建GFilterByStringGFilterByBoolean,并创建@987654331 @一个抽象类);类似的东西……

以上是关于GWT RPC 警告检查所有子类型的主要内容,如果未能解决你的问题,请参考以下文章

GWT RPC 警告:servlet 有映射,但 web.xml 没有对应的映射

尽早避免 GWT 的 com.google.gwt.user.client.rpc.SerializationException 的最佳实践

GWT:RPC 失败(StatusCodeException)

来自 GWT 的 RPC 调用中的异常

GWT 通过 RPC 发送类型 OBJECT

rpc与gwt一起使用时如何将参数类型设置为inout?