如何在多个客户端模块/应用程序之间共享GWT RPC RemoteServiceServlet

时间:2012-02-25 17:57:47

标签: gwt gwt-rpc

我在Jetty中运行了几个GWT模块和Web应用程序。他们每个人都想使用我的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的模块称为 discussion ,我在服务器上收到此错误。

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文件复制到根网络上下文中,这样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的正确方法是什么?

更新

此错误出现在托管的devmode中,并在完全编译后消失。也许这与gwt serialization policy hosted mode out of sync有关。如果我能更好地重现问题,我会再次更新。

1 个答案:

答案 0 :(得分:0)

请参阅我的回答here。简短的回答是:您需要在编译时将mystuff.web.shared.User源提供给discussions模块。