GWT сериализация подкласса - PullRequest
       17

GWT сериализация подкласса

6 голосов
/ 26 августа 2010

У меня есть служба RPC, которая возвращает объект типа GameEvent, который расширяется от Event (аннотация).Когда я получаю объект на стороне клиента, все свойства, унаследованные от Event (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() { 
    }
}

Обновление: я использую платформу 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;
    }
}

1 Ответ

0 голосов
/ 26 августа 2010

Я постараюсь сделать удар.

Убедитесь, что класс Event находится в белом списке сериализации GWT (файл .gwt.rpc, который создается для каждого интерфейса службы). Если это не так, возможно, вам придется обмануть GWT , чтобы добавить его.

...