I have RPC service that returns an object of type GameEvent that
extends from Event (abstract). When I get the object on the client
side, all the properties inherited from Event (eventId, copyEventId,
gameTimeGMT) are set to null
whereas on the server side, these
properties have values.
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() {
}
}
Update: I use the gwt-platform framework (MVP implementation). Here is the call to the service client side. The result.getGE()
returns the GameEvent object but with null
properties.
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());
}
});
The action handler:
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);
}
}
The Result:
public class GetFormattedEventResult implements Result {
private GameEvent e;
@SuppressWarnings("unused")
private GetFormattedEventResult() {
}
public GetFormattedEventResult(GameEvent gameEvent) {
开发者_StackOverflow社区 e = gameEvent;
}
public GameEvent getGE() {
return e;
}
}
I'll try to take a stab.
Verify that the Event class is in the GWT serialization whitelist (the .gwt.rpc
file that is generated for each service interface). If it's not, you may have to trick GWT into adding it.
精彩评论