Java – GWT and enumeration issues
I have an enumeration in the client of the GWT application. When I try to run it, I receive an exception related to serialization problems Did I make a mistake? I read that this enumeration is supported by GWT. I use the last version
Enumeration:
public enum AnEnum implements Serializable { ITEM_A("Item a description"),ITEM_B("Item b description"); private String description; private AnEnum(String description) { this.description = description; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
Exceptions:
Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(UnkNown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(UnkNown Source) at java.lang.reflect.Method.invoke(UnkNown Source) at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeWithCustomSerializer(ServerSerializationStreamWriter.java:742) ... 47 more Caused by: com.google.gwt.user.client.rpc.SerializationException: Type '(...).client.(...).AnEnum' 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 = ITEM_A at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610) at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129) at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:43) at com.google.gwt.user.client.rpc.core.java.util.LinkedList_CustomFieldSerializer.serialize(LinkedList_CustomFieldSerializer.java:36) ... 52 more
Solution
Add the isserializable interface, a default scope parameterless constructor, and ensure that it is in GWT One of the paths listed in the source code in the XML file< source path =“client”>
I really think the third suggestion is a problem; I remember having this problem before because I have a dto outside the source path
You can have more than one source code
<source path="common" /> <source path="client" />
One pattern is to put persistent objects directly on COM mysite. Common, and through COM mysite. common. Dto is a mashup of persistent items transmitted by wire. Of course, the client GUI code is on the client
package com.mysite.client; import java.io.Serializable; import com.google.gwt.user.client.rpc.IsSerializable; public enum AnEnum implements Serializable,IsSerializable { ITEM_A("Item a description"),ITEM_B("Item b description"); private String description; AnEnum() { } AnEnum(String description) { this.description = description; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }