GWT和java.io.Serializable

时间:2009-08-29 12:20:40

标签: serialization gwt gwt-rpc

在我的GWT应用程序中,我有以下模型类:

import com.google.gwt.user.client.rpc.IsSerializable;

public class TestEntity implements IsSerializable {
    public String testString;
}

这个类实现了GWT自定义IsSerializable标记接口 - 我真的不喜欢它,因为我的模型类不仅仅用于GWT。所以我更喜欢java.io.Serializable。

但是如果我修改类来实现Serializable而不是IsSerializable,那么GWT RPC机制就不再起作用了。我没有在服务器端出错,而是在客户端AsyncCallback上.onFailure被调用。

我正在使用......

  • GWT 1.7.0。
  • Spring 2.5.6.SEC01
  • Spring和GWT按照here所述进行配置。

3 个答案:

答案 0 :(得分:1)

事实证明,这个Spring-MVC和GWT混合技术正在我新工作的代码库中使用 - 难怪我得到的错误是类似的!感谢您的发布 - 它帮助我确定问题并修复它。我们的代码基于您发布的文章中的旧代码 - 或者代码基于的代码!抄袭比比皆是!

总而言之,该文章提出了一种将GWT与Spring-MVC集成的方法。解决方案的关键是提供一个Servlet servlet类,它将Spring MVC Controller与GWT RemoteServiceServlet相结合。不支持Serializable DTO对象,因为(我认为)代码是基于GWT-1.4之前的代码,它无法处理未实现GWT的isSerializable标记接口的DTO。一旦你知道发生了什么,对控制器类的更新就非常简单了......

我看到的两个固定行只是通过SerializationPolicyProvider(在RPC.decodeRequest()方法的最后一个参数中是'this'。调用类扩展了GWT的RemoveServiceServlet,它是一个SerializationPolicyProvider)。我假设这个简单的修复导致调用更新的(1.4版后)GWT代码,它可以处理Serializable和isSerializable类。 SerializationPolicyProvider查看serializationPolicy。

第二个修补程序将serializationPolicy传递给RPC.invokeAndEncodeResponse()方法。我认为这是在编译GWT模块时验证的DTO对象的* .gwt.rpc白名单。

答案 1 :(得分:0)

您收到的错误究竟是什么?我们正在为我们的DTO使用Serializable而没有任何问题,所以你也应该能够这样做。

答案 2 :(得分:0)

好的,我查看了Gwt-Spring-Article(我发布的链接)的评论并找到了解决方案。我不得不在流程调用方法中更改两行:

RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass, this);
return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());