2010-08-25 10 views
6

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; 
    } 
} 

Respuesta

0

voy a tratar de tomar una puñalada.

Verifique que la clase de evento esté en la lista blanca de serialización de GWT (el archivo .gwt.rpc que se genera para cada interfaz de servicio). Si no es así, puede que tenga que trick GWT para agregarlo.

+0

Se ha actualizado la pregunta. También traté de engañar a GWT pero no está funcionando. – Sydney

+0

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

+0

ahh, eso tiene sentido. Lo siento, no podría ser más ayuda. GWTC debería haber emitido una advertencia al respecto. –

Cuestiones relacionadas