Tengo el servicio RPC que devuelve un objeto de tipo GameEvent que se extiende desde Evento (resumen). Cuando obtengo el objeto en el lado del cliente , todas las propiedades heredadas de Event (eventId, copyEventId, gameTimeGMT) se establecen en null
mientras que en el lado del servidor, estas propiedades tienen valores.GWT serialización de una subclase
public class GameEvent extends Event implements IsSerializable {
private String homeTeam;
private String awayTeam;
public GameEvent() {
}
}
// Annotation are from the twig-persist framework which should not
// impact the serialization process.
public abstract class Event implements IsSerializable {
@Key
protected String eventId;
@Index
protected String copyEventId;
protected Date gameTimeGMT;
protected Event() {
}
}
Actualización: Uso el framework gwt-platform (implementación de MVP). Aquí está la llamada al lado del cliente del servicio. El result.getGE()
devuelve el objeto GameEvent pero con las propiedades null
.
dispatcher.execute(
new GetFormattedEventAction(
id),
new AsyncCallback<GetFormattedEventResult>() {
@Override
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
@Override
public void onSuccess(
GetFormattedEventResult result) {
FormattedGameEvent formattedGameEvent = new FormattedGameEvent(
result.getGE());
}
});
El gestor de acción:
public class GetFormattedEventActionHandler implements
ActionHandler<GetFormattedEventAction, GetFormattedEventResult> {
@Override
public GetFormattedEventResult execute(GetFormattedEventAction action,
ExecutionContext context) throws ActionException {
GameEvent gameEvent = null;
QueryResultIterator<GameEvent> rs = datastore.find().type(
GameEvent.class).addFilter("copyEventId", FilterOperator.EQUAL,
action.getEventId()).returnResultsNow();
if (rs.hasNext()) {
gameEvent = rs.next();
}
return new GetFormattedEventResult(gameEvent);
}
}
El resultado:
public class GetFormattedEventResult implements Result {
private GameEvent e;
@SuppressWarnings("unused")
private GetFormattedEventResult() {
}
public GetFormattedEventResult(GameEvent gameEvent) {
e = gameEvent;
}
public GameEvent getGE() {
return e;
}
}
Se ha actualizado la pregunta. También traté de engañar a GWT pero no está funcionando. – Sydney
GameEvent tenía propiedades de un tipo que no implementaba IsSerializable, es por eso que no estaba en la lista blanca de serialización. – Sydney
ahh, eso tiene sentido. Lo siento, no podría ser más ayuda. GWTC debería haber emitido una advertencia al respecto. –