Tengo una enumeración en la parte cliente de una aplicación GWT y obtengo una excepción cuando intento ejecutarla relacionada con problemas de serialización. ¿Estoy haciendo algo mal? Leí que las enums son compatibles con GWT y estoy usando la última versión.Problemas con GWT y Enum
La enumeración:
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;
}
}
La excepción:
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
qué paquete es la enumeración, y qué caminos están listados en las etiquetas de código de gwt.xml? –
¡Definitivamente parece haber un problema/error con las enums y GWTRPC! Probé tu código con GWT 2.0.3, y funciona (ni siquiera se requiere un constructor no-arg). Pero cuando uso 'setDescription (" new value ")' antes de llamar al método de servicio, ese cambio a 'description' está ** perdido ** durante la transferencia al servidor - es decir, el servidor ve' description' como todavía se está configurando a " Artículo una descripción ". No lo he intentado con la última versión de GWT, pero tal vez Google intentó solucionar ese problema para GWT 2.1, pero presentó el problema de la serialización. –
Acabo de encontrar algo en la [documentación] (http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html) sobre esto: "Las constantes de enumeración se serializan como un nombre único; ninguno de los valores de campo se serializan. " Por lo tanto, probablemente no sea una buena idea usar enumeraciones con campos mutables junto con GWTRPC. –