I am working on a gwt-Evaluation project and we are working with smartgwt, our first goal was to simply make a GUI working with local TestData. Now we are supposed to split the client code from the TestData which should be moved to the server. So I need to make RPC calls to get the necessary data from the server services all the time but I have a hard time getting it to work because of non-serializable types I guess. This is a simplyfied code example.
My user-defined Class is not serializable it seems but I can't figure out why.
ZeitbuchungDaten.class
FakeDatenService.java
Same for FakeDatenServiceAsync.java
FakeDatenServiceImpl.java
When I dont implement IsSerializable in ZeitbuchungDaten I get the GUI running until I trigger the RPC call which results in this error:
"Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' 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."
When I implement it, I get this error immediately:
[DEBUG] Analyzing 'com.isp.ajaxtest.client.FakeDatenService' for serializable types
[DEBUG] Analyzing methods:
public abstract java.util.List<com.isp.ajaxtest.client.ZeitbuchungDaten> getAlleZeitbuchungen()
Return type: java.util.List<com.isp.ajaxtest.client.ZeitbuchungDaten>
java.util.List<com.isp.ajaxtest.client.ZeitbuchungDaten>
Verifying instantiability
java.util.Stack<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.Stack<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.Stack<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.Vector<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.Vector<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.Vector<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.LinkedList<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.LinkedList<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.LinkedList<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.Arrays.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.Arrays.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.Arrays.ArrayList<E>' because it is exposed as an array with a maximum dimension of 1 in this type or one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten[]
Analyzing component type:
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.ArrayList<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
How to fix this problem?
My user-defined Class is not serializable it seems but I can't figure out why.
ZeitbuchungDaten.class
Code:
package com.isp.ajaxtest.client; import java.util.Date; import com.google.gwt.user.client.rpc.IsSerializable; public class ZeitbuchungDaten implements IsSerializable { private int idZeitbuchung; private int idMitarbeiter; private int idAuftrag; private Date zeitpunktDerBuchung; private int buchungsArt; private double fertiggestelltInProzent; private double geschaetzteRestzeitInStunden; private boolean endeGebucht; private int startIdZeitbuchung; private int endeIdZeitbuchung; private boolean storniert; private String kommentarZurBuchung; public ZeitbuchungDaten( int idZeitbuchung, int idMitarbeiter, int idAuftrag, Date zeitpunktDerBuchung, int buchungsArt ) { this.setIdZeitbuchung( idZeitbuchung ); this.setIdMitarbeiter( idMitarbeiter ); this.setIdAuftrag( idAuftrag ); this.setZeitpunktDerBuchung( zeitpunktDerBuchung ); this.setBuchungsArt( buchungsArt ); this.setFertiggestelltInProzent( fertiggestelltInProzent ); this.setGeschaetzteRestzeitInStunden( geschaetzteRestzeitInStunden ); this.setEndeGebucht( endeGebucht ); this.setStartIdZeitbuchung( startIdZeitbuchung ); this.setEndeIdZeitbuchung( endeIdZeitbuchung ); this.setStorniert( storniert ); this.setKommentarZurBuchung( kommentarZurBuchung ); } //Setter+Getter }
Code:
package com.isp.ajaxtest.client; import java.util.List; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @RemoteServiceRelativePath("fakeDaten") public interface FakeDatenService extends RemoteService { List<ZeitbuchungDaten> getAlleZeitbuchungen(); List<ZeitbuchungDaten> getAlleZeitbuchungenByIdAuftrag(int idAuftrag); }
FakeDatenServiceImpl.java
Code:
package com.isp.ajaxtest.server; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.isp.ajaxtest.client.ZeitbuchungDaten; public class FakeDatenServiceImpl extends RemoteServiceServlet implements FakeDatenService { final List<ZeitbuchungDaten> alleZeitbuchungen = new ArrayList<ZeitbuchungDaten>(); @SuppressWarnings("deprecation") public FakeDatenServiceImpl() { //Test Date Object final Date date = new Date(); date.setDate( 22 ); date.setYear( 108 ); date.setMonth( 7 ); //ZeitbuchungDatenContainer final ZeitbuchungDaten testZeitbuchung1 = new ZeitbuchungDaten( 1, 1, 1, date, 0 ); testZeitbuchung1.setEndeGebucht( true ); testZeitbuchung1.setEndeIdZeitbuchung( 2 ); alleZeitbuchungen.add( testZeitbuchung1 ); //many more hard-coded ZeitbuchungDatenObjects.... } public List<ZeitbuchungDaten> getAlleZeitbuchungen() { return alleZeitbuchungen; } public List<ZeitbuchungDaten> getAlleZeitbuchungenByIdAuftrag(int idAuftrag) { List<ZeitbuchungDaten> alleZeitbuchungenByIdAuftrag = new ArrayList<ZeitbuchungDaten>(); for(int i = 0; i<alleZeitbuchungen.size();i++) { if(alleZeitbuchungen.get( i ).getIdAuftrag()==idAuftrag) { alleZeitbuchungenByIdAuftrag.add( alleZeitbuchungen.get(i) ); } } return alleZeitbuchungenByIdAuftrag; } }
"Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' 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."
When I implement it, I get this error immediately:
[DEBUG] Analyzing 'com.isp.ajaxtest.client.FakeDatenService' for serializable types
[DEBUG] Analyzing methods:
public abstract java.util.List<com.isp.ajaxtest.client.ZeitbuchungDaten> getAlleZeitbuchungen()
Return type: java.util.List<com.isp.ajaxtest.client.ZeitbuchungDaten>
java.util.List<com.isp.ajaxtest.client.ZeitbuchungDaten>
Verifying instantiability
java.util.Stack<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.Stack<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.Stack<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.Vector<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.Vector<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.Vector<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.LinkedList<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.LinkedList<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.LinkedList<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.Arrays.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.Arrays.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.Arrays.ArrayList<E>' because it is exposed as an array with a maximum dimension of 1 in this type or one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten[]
Analyzing component type:
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
java.util.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>
Checking parameters of 'java.util.ArrayList<com.isp.ajaxtest.client.ZeitbuchungDaten>'
Checking type argument 0 of type 'java.util.ArrayList<E>' because it is directly exposed in this type or in one of its subtypes
com.isp.ajaxtest.client.ZeitbuchungDaten
Type 'com.isp.ajaxtest.client.ZeitbuchungDaten' was not serializable and has no concrete serializable subtypes
How to fix this problem?
Comment