GWT e java.io.Serializable
-
20-09-2019 - |
Pergunta
No meu aplicativo GWT eu tenho a seguinte classe de modelo:
import com.google.gwt.user.client.rpc.IsSerializable;
public class TestEntity implements IsSerializable {
public String testString;
}
Esta classe implementa o GWT personalizado IsSerializable marcador de interface - o que eu realmente não gosto, porque eu uso o meu classes de modelo não só para GWT.Por isso, prefiro java.io.Serializable.
Mas se eu modificar a classe para implementar Serializable em vez de IsSerializable, o GWT RPC mecanismo não funciona mais. Eu não receber um erro no lado do servidor, mas no cliente AsyncCallback.onFailure é invocado.
Eu estou usando...
- GWT 1.7.0.
- Primavera 2.5.6.SEC01
- A primavera e o GWT são configurados como descrito aqui.
Solução 3
OK, passei pelos comentários da artícula GWT-Spring (o link que publiquei) e encontrei a solução. Eu tive que mudar duas linhas no método de chamada do processo:
RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass, this);
return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());
Outras dicas
Acontece que esta Spring-MVC e GWT técnica híbrida está sendo usado no código base no meu novo emprego - não admira que o erro que eu estava recebendo era semelhante!Obrigado por esta postagem me ajudou a identificar o problema e corrigi-lo.O código que tivemos foi com base no antigo código do artigo que você postou - ou o que quer que o código foi baseado em!Plágio não faltam!
Para resumir, que o artigo propõe uma forma de integrar o GWT com o Spring-MVC.O cerne da solução é fornecer um Servlet servlet classe que combina uma Mola Controlador MVC com um GWT RemoteServiceServlet.Serializable DTO objetos não eram suportados, uma vez que (presumo) o código foi baseado em pré-GWT-1.4 código, o que poderia lidar com DTOs que não implementar GWT do isSerializable marcador de interface.A actualização para o controlador de classe é muito simples uma vez que você sabe o que está acontecendo...
As duas linhas fixas vejo simplesmente passam a SerializationPolicyProvider (que é o 'isto' o último parâmetro para RPC.decodeRequest() método.A chamada classe estende GWT do RemoveServiceServlet, que é um SerializationPolicyProvider).Esta correção simples eu presumo que faz com que o atualizada (pós 1.4) GWT código a ser invocado, o que pode lidar com Serializable bem como isSerializable classes.O SerializationPolicyProvider olha o serializationPolicy.
A segunda correção passa a serializationPolicy através de RPC.invokeAndEncodeResponse() método.Presumo que este é o *.gwt.rpc branca de DTO objetos que foram verificados quando o GWT módulo foi compilado.
Qual é exatamente o erro que você recebe? Estamos usando serializável para nossos DTOs sem problemas, para que você também possa ser capaz.