从 GWT 2.7 更新到 2.8.1 后出现 IncompatibleRemoteServiceException
IncompatibleRemoteServiceException after updating from GWT 2.7 to 2.8.1
将我的 GWT 2.7 应用程序更新到 GWT 2.8.1 后,我收到以下异常:
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: The response could not be deserialized
Caused by: com.google.gwt.user.client.rpc.SerializationException: /my/path/to/a/file.pdf
。此路径存储在MyClass
:
的路径变量中
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable;
public class MyClass implements IsSerializable {
private Integer id;
private String name;
private String path;
private List<String> assetClasses = new ArrayList<>();
private List<String> keywords = new ArrayList<>();
private List<Integer> regions = new ArrayList<>();
public ReportLink() {
// Empty default constructor for GWT serialization.
}
...getters + setters following
}
如您所见,我正在实施 IsSerializable
。此外,我有一个空构造函数(这可能是此异常最常见的原因;-))并且 class 位于共享文件夹中(在 *.gwt.xml 中引用)。
我从数据库查询中设置这样的数据:
myClass.setName(resultSet.getString("name"));
myClass.setPath(resultSet.getString("path"));
String keywords = resultSet.getString("keywords");
myClass.setKeywords(Arrays.asList(keywords.split("\s*,\s*")))
...
并将不同的 MyClass
添加到 List<MyClass>
。之后将其中两个列表添加到地图并返回:
Map<String, List<MyClass>> map = new HashMap<>();
map.put("A", a);
map.put("B", b);
return map;
这只发生在编译后的服务器上。在 SuperDevMode 中一切正常。有什么想法吗?
我已经删除了classes和deploy文件夹,做了一个project + gwt-unit-cache clean,重新编译了多次,还是出现异常
我也想知道为什么异常显式记录字符串 path
应该可以毫无问题地序列化?!
原因是 gwt-servlet.jar
的旧版本在 WEB-INF/lib
文件夹中与 2.8.1 版的新 gwt-servlet.jar
旁边有另一个名称。因此,乍一看并不明显。尴尬,但也许它提醒其他人仔细检查...
我遇到了同样的问题,只是在枚举中添加Serializable(实现接口)并添加一个无参数的构造函数,就这样......
将我的 GWT 2.7 应用程序更新到 GWT 2.8.1 后,我收到以下异常:
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: The response could not be deserialized
Caused by: com.google.gwt.user.client.rpc.SerializationException: /my/path/to/a/file.pdf
。此路径存储在MyClass
:
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.IsSerializable;
public class MyClass implements IsSerializable {
private Integer id;
private String name;
private String path;
private List<String> assetClasses = new ArrayList<>();
private List<String> keywords = new ArrayList<>();
private List<Integer> regions = new ArrayList<>();
public ReportLink() {
// Empty default constructor for GWT serialization.
}
...getters + setters following
}
如您所见,我正在实施 IsSerializable
。此外,我有一个空构造函数(这可能是此异常最常见的原因;-))并且 class 位于共享文件夹中(在 *.gwt.xml 中引用)。
我从数据库查询中设置这样的数据:
myClass.setName(resultSet.getString("name"));
myClass.setPath(resultSet.getString("path"));
String keywords = resultSet.getString("keywords");
myClass.setKeywords(Arrays.asList(keywords.split("\s*,\s*")))
...
并将不同的 MyClass
添加到 List<MyClass>
。之后将其中两个列表添加到地图并返回:
Map<String, List<MyClass>> map = new HashMap<>();
map.put("A", a);
map.put("B", b);
return map;
这只发生在编译后的服务器上。在 SuperDevMode 中一切正常。有什么想法吗?
我已经删除了classes和deploy文件夹,做了一个project + gwt-unit-cache clean,重新编译了多次,还是出现异常
我也想知道为什么异常显式记录字符串 path
应该可以毫无问题地序列化?!
原因是 gwt-servlet.jar
的旧版本在 WEB-INF/lib
文件夹中与 2.8.1 版的新 gwt-servlet.jar
旁边有另一个名称。因此,乍一看并不明显。尴尬,但也许它提醒其他人仔细检查...
我遇到了同样的问题,只是在枚举中添加Serializable(实现接口)并添加一个无参数的构造函数,就这样......