GWT сериализация подкласса
-
01-10-2019 - |
Вопрос
У меня есть служба RPC, которая возвращает объект типа GameeVent, который простирается от события (аннотация). Когда я получаю объект на стороне клиента, все свойства, наследуемые от события (EventiD, copyEventid, gametimegmt), установлены на null
Принимая во внимание, что на стороне сервера эти свойства имеют значения.
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() {
}
}
Обновление: я использую Framework GWT-Platform (внедрение MVP). Вот звонок на стороне обслуживания клиента. То result.getGE()
возвращает объект GameeVent, но с 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());
}
});
Обработчик действий:
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);
}
}
Результат:
public class GetFormattedEventResult implements Result {
private GameEvent e;
@SuppressWarnings("unused")
private GetFormattedEventResult() {
}
public GetFormattedEventResult(GameEvent gameEvent) {
e = gameEvent;
}
public GameEvent getGE() {
return e;
}
}
Решение
Я постараюсь сделать удар.
Убедитесь, что класс событий находится в сериализации GWT Whitelist ( .gwt.rpc
Файл, который генерируется для каждого сервисного интерфейса). Если это не так, вам, возможно, придется трюк GWT. добавлять его.