如何在多项目GWT设置中修复RPC错误IncompatibleRemoteServiceException?

时间:2017-07-12 16:48:23

标签: java gwt rpc

我决定将我的客户端服务器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实现中配置不同的东西吗?

2 个答案:

答案 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