如何修复多项目 GWT 设置中的 RPC 错误 IncompatibleRemoteServiceException?
How to fix RPC error IncompatibleRemoteServiceException in a multi-project GWT setup?
我决定将我的客户端服务器 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
的 class 中,如果常规策略文件出现问题,该错误将被加载。
来自 javadoc:
A serialization policy compatible with GWT 1.3.3 RPC. This is used
when no serialization policy file is present.
在同一个 class 中,我们有:
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,客户端必须请求到 http://example.com/webapp/ModA/service。
我决定将我的客户端服务器 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
的 class 中,如果常规策略文件出现问题,该错误将被加载。
来自 javadoc:
A serialization policy compatible with GWT 1.3.3 RPC. This is used when no serialization policy file is present.
在同一个 class 中,我们有:
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,客户端必须请求到 http://example.com/webapp/ModA/service。