Java 类将不会在GWT应用程序中序列化
我省略了包名,但.class文件位于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
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)