Java 类将不会在GWT应用程序中序列化

Java 类将不会在GWT应用程序中序列化,java,gwt,serialization,Java,Gwt,Serialization,我省略了包名,但.class文件位于GWT的客户端和服务器代码都可以访问的包中 有问题的班级被开除了。我修改该类只是为了指定它实现了Comparator而不是原始类型Comparator,并且我尝试使用IsSerializable和Serializable接口,但都没有用。现在它正在使用IsSerializable 下面是堆栈跟踪的前5行 com.google.gwt.user.client.rpc.SerializationException: Type 'NaturalOrderCompa

我省略了包名,但.class文件位于GWT的客户端和服务器代码都可以访问的包中

有问题的班级被开除了。我修改该类只是为了指定它实现了
Comparator
而不是原始类型
Comparator
,并且我尝试使用
IsSerializable
Serializable
接口,但都没有用。现在它正在使用
IsSerializable

下面是堆栈跟踪的前5行

com.google.gwt.user.client.rpc.SerializationException: 
Type 'NaturalOrderComparator' was not included in the set of types which 
can be serialized by this SerializationPolicy or its Class object could
not be loaded. For security purposes, this type will not be serialized.: 
instance = NaturalOrderComparator@35d9c40d

如果它是一个简单的Comparator实现,那么不要将其返回到entity/bean对象中,而是将其放在.client.*中,以便对其进行编译。这样,客户端和服务器都可以使用它。如果必须将其放在对象中,则将其设置为瞬态,这样它就不会被序列化。通常会有另一个名为shared的包,并确保.gwt.xml文件具有
,以便编译器将编译共享包中的类。

我的赌注是调用
Character.isSpaceChar
,这可能导致该类无法序列化。然而,GWT确实模拟了不推荐使用的方法—也许它可以满足您的需要?

这种方法的一个优点是,服务器希望向客户机(或客户机希望向服务器)发送应用于某些任务的比较器。假设它在shared或client中,所以GWT可以看到它(我同意,它似乎不是),这应该是可能的,甚至可能是合理的。这就是我拥有它的地方——“shared”包。我的公司刚刚将其重命名为“restricted”,而我忘记了最初的命名。那么,是您的.gwt.xml文件中没有的问题吗?这解决了您的问题吗?这不是问题所在-'restricted'已经存在于.gwt.xml文件中。这正是问题所在。
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:665)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.client.rpc.core.java.util.TreeMap_CustomFieldSerializer.serialize(TreeMap_CustomFieldSerializer.java:47)
at com.google.gwt.user.client.rpc.core.java.util.TreeMap_CustomFieldSerializer.serializeInstance(TreeMap_CustomFieldSerializer.java:71)
at com.google.gwt.user.client.rpc.core.java.util.TreeMap_CustomFieldSerializer.serializeInstance(TreeMap_CustomFieldSerializer.java:29)