【发布时间】:2012-03-15 19:58:32
【问题描述】:
我有几个 GWT 模块和 Web 应用程序在 Jetty 中运行。他们每个人都想使用我的LoginService RPC 接口,所以我把这个接口和它的servlet 实现放在一个通用模块中。我从我的根 Web 上下文中提供 servlet (LoginServiceImpl),web.xml 在 url "/loginService" 处公开它。在另一个 GWT 模块中,要使用此服务,我必须设置入口点,如下所示...
LoginServiceAsync loginService = GWT.create(LoginService.class);
ServiceDefTarget t = (ServiceDefTarget)loginService;
t.setServiceEntryPoint("/loginService");
现在,尝试使用 loginService 的模块称为 discussions,我在服务器上收到此错误。
ERROR: The serialization policy file
'/discussions/discussions/7B344C69AD493C1EC707EC98FE148AA0.gwt.rpc' was not found;
did you forget to include it in this deployment?
所以 servlet 报告了一个提到客户端(讨论模块)的错误。我猜 RPC 管道从客户端传递了这个 .rpc 文件的名称,而 servlet 现在正在寻找它。 (?) 作为实验,我将讨论模块中的 *.gwt.rpc 文件复制到了根 Web 上下文中,以便 servlet 可以找到它们。这确实阻止了错误。但我仍然收到另一个错误:
com.google.gwt.user.client.rpc.SerializationException: Type
'mystuff.web.shared.User' was not assignable to
'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field
serializer. For security purposes, this type will not be serialized.: ...
这个类是可序列化的;它以前在其他模块中工作过,所以现在我迷路了。
在多个客户端模块中使用LoginService 的正确方法是什么?
更新:
此错误在托管开发模式中出现,并在完全编译后消失。也许这与 gwt serialization policy hosted mode out of sync 有关。如果我能更好地重现问题,我会再次更新。
【问题讨论】: