Wie einige vielleicht wissen, investiere ich einen Teil meiner Freizeit derzeit in ein Geheimprojekt, bei dem unter anderem eine hochinteressante Technologie zum Einsatz kommt, die wir Informatiker natürlich mit einer nichtssagenden Abkürzung benennen: GWT.
Um es kurz zu machen: GWT ist super cool, weil ich damit eine Javascript-Anwendung bauen kann, ohne eine Zeile Javascript zu programmieren. GWT erzeugt nämlich Javascript aus Java.
Meistens. Manchmal auch nicht. Manchmal beschwert sich der Java-nach-Javascript-Compiler darüber, dass Klassen nicht serialisierbar seien (weil GWT die Objekte über seine eigene RPC-Schnittstelle schicken möchte).
Schade ist, dass die Fehlermeldung meistens nichts darüber aussagt, worin denn der Fehler genau besteht – oder in welcher Klasse er genau liegt. Letzteres erfährt man nur, wenn man den GWT-Compiler im DEBUG-Modus laufen lässt, der eine über 6 MB große Ausgabe erzeugt. Zuviel für das Konsolenfenster von Eclipse, also starte ich den Compiler von der Kommandozeile:
java -cp /home/uwe/Develop/gwt-sdk/gwt-dev-linux.jar:/home/uwe/Develop/gwt-sdk/gwt-user.jar:src/:lib/gwt-fx-v4.0.0.jar:lib/jdo2-api-2.3-eb.jar com.google.gwt.dev.Compiler -logLevel DEBUG de.ludetis.santadaemonica.SantaDaemonica > gwtc.log
Eine Suche im Logfile nach ERROR zeigt dann endlich das Problem:
Type 'de.ludetis.game.model.Country' is not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' or 'java.io.Serializable' nor does it have a custom field serializer
Liebe Coder bei Google, diese Ausgabe gehört in ein log.error(), nicht in ein log.debug(). Ich würd’s ja ändern, aber ich finde die Stelle in eurem Code nicht. Deshalb schreib ich jetzt das „implements Serializable“ in die Country-Klasse und mache weiter.