Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修复多项目GWT设置中的RPC错误CompatibleMoteServiceException?_Java_Gwt_Rpc - Fatal编程技术网

Java 如何修复多项目GWT设置中的RPC错误CompatibleMoteServiceException?

Java 如何修复多项目GWT设置中的RPC错误CompatibleMoteServiceException?,java,gwt,rpc,Java,Gwt,Rpc,我决定将我的客户机-服务器gwt项目分为3个独立的mvn项目: 客户 服务器 共享 共享组件包含所有模型类、服务接口和ServiceAsync接口。此项目被声明为服务器和客户端gwt项目的依赖项。一切都编译良好,客户端应用程序运行正常。 客户端也会发出正确的rpc请求,但服务器会响应: com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533","Type name elision in 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实现中进行不同的配置吗?

这意味着无论出于何种原因,您的
*.gwt.rpc
文件都无法加载(即,它们要么不存在,要么可能无法通过预期的URL访问)。这可能意味着在分割之后,您可能把它们的位置弄错了

您收到的错误仅出现在名为
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
运行调试器,并查看它为什么不加载您希望的策略文件。

可能是浏览器正在缓存.nochache.js文件

编辑:

我只记得这件事发生过一次。这是一段模糊的记忆。。。servlet的路径是否正确?客户端是否请求正确的url


模块ModA的服务在deploy/ModA/rpcPolicyManifest/manifests中查找。servlet应映射到/ModA/service,客户端必须请求到。

如何运行(和/或打包和/或部署)应用程序?我使用maven进行打包/部署确保不涉及缓存。没错,我缺少策略文件(.rpc)。它们存在于我的服务器项目中,但不在客户端。通常的处理方法是什么?使用web.xml在客户机项目上重新生成,或者以某种方式重用来自服务器的项目?例如,请确保在打包期间将它们放置在正确的位置。我不知道您是否可以单独生成它们。但是问题是,您是否将客户机/服务器模块部署在不同的服务器上?正如我前面提到的,客户机和服务器是两个完全独立的项目/存储库,因此是分别构建的。尽管所有的模型和服务都在另一个项目中,该项目被标记为客户端和服务器端的mvn/gwt依赖项。它们是如何构建的并不重要,重要的是它们是如何部署的。我也单独构建模块,但将它们部署在同一台服务器上,因此我只需要一组序列化策略。请注意,服务器端RPC通过servlet.getServletContext().getResourceAsStream(serializationPolicyFilePath)加载资源。另外,如果您在tomcat上使用apache前端,并且公共URL与tomcat的不同,那么可能会遇到一些问题。我做了一些测试,结果发现唯一阻碍它工作的是RPC负载中的URL<代码>7 | 1 | 4|https://url.foo/bar|2A094F8DDEB | | getClientConfigData | 1 | 2 | 3 | 4 | 0 |。我改为原来的客户端使用的(在分离后端/前端之前),所有东西都可以工作。我得想办法在新客户身上做到这一点。(如有任何上述情况发生)