我决定将我的客户端服务器gwt项目拆分为3个独立的mvn项目:
共享组件包含所有模型类,服务接口和ServiceAsync接口。该项目被声明为服务器和客户端gwt项目的依赖项。一切都编译好,客户端应用程序正常运行。 客户端也发出正确的rpc请求,但服务器响应:
com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","Type name elision in RPC payloads is only supported if the RPC whitelist file is used."
问题是什么?我应该在servlet实现中配置不同的东西吗?
答案 0 :(得分:1)
这意味着无论出于何种原因,您的*.gwt.rpc
文件都无法加载(即它们不存在或可能无法通过其预期的网址访问)。这可能意味着您在拆分后错位。
您收到的错误仅出现在名为com.google.gwt.user.server.rpc.impl.LegacySerializationPolicy
的类中,如果常规策略文件出现问题,则会加载该类。
来自javadoc:
与GWT 1.3.3 RPC兼容的序列化策略。这是用的 没有序列化策略文件时。
在同一课程中,我们有:
private static final String ELISION_ERROR = "Type name elision in RPC "
+ "payloads is only supported if the RPC whitelist file is used.";
......还有类似的东西:
/**
* Implemented to fail with a useful error message.
*/
public final String getClassNameForTypeId(String id)
throws SerializationException {
throw new SerializationException(ELISION_ERROR);
}
所以看起来这是故意的,虽然错误信息具有讽刺意味的是不太有用。
您可以通过RemoteServiceServlet#loadSerializationPolicy
运行调试程序,看看为什么它没有加载您期望的策略文件。
答案 1 :(得分:0)
可能是浏览器正在缓存.nochache.js文件。
编辑:
我记得有一次发生这种情况。这是一个模糊的记忆...... servlet是否在正确的路径上?请求正确网址的客户端?
模块ModA的服务在deploy / ModA / rpcPolicyManifest / manifests中查找。 Servlet应映射到/ ModA / service,客户端必须请求http://example.com/webapp/ModA/service。