Ho un enum nella parte client di un'applicazione GWT e sto ricevendo un'eccezione quando provo ad eseguirlo che è correlato a problemi di serializzazione. Sto facendo qualcosa di sbagliato? Ho letto che le enumerazioni sono supportate da GWT e sto usando l'ultima versione.Problemi con GWT ed Enum
L'enum:
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;
}
}
L'eccezione:
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
quale pacchetto è l'enum, e quali percorsi sono elencati nei tag sorgente di gwt.xml? –
Sembra esserci un problema/bug con enumerazioni e GWTRPC! Ho testato il tuo codice con GWT 2.0.3, e funziona (un costruttore no-arg non è nemmeno richiesto). Ma quando uso 'setDescription (" nuovo valore ")' prima di chiamare il metodo di servizio, quella modifica a 'description' è ** lost ** durante il trasferimento al server - cioè il server vede' description' come ancora impostato su " Item a description ". Non l'ho provato con l'ultima versione di GWT, ma forse Google ha tentato di risolvere quel problema per GWT 2.1, ma ha introdotto il problema di serializzazione. –
Appena trovato qualcosa nella [documentazione] (http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html) su questo: "Le costanti di enumerazione sono serializzate solo come nome, nessuno dei valori dei campi è serializzato ". Pertanto, probabilmente non è una buona idea usare enum con campi mutabili insieme a GWTRPC. –