GWT 应用程序在 Windows 上运行,而不是在具有相同配置的 Linux 上运行
Posted
技术标签:
【中文标题】GWT 应用程序在 Windows 上运行,而不是在具有相同配置的 Linux 上运行【英文标题】:GWT application running on windows and not on linux with same configuration 【发布时间】:2020-08-03 12:39:07 【问题描述】:我是 GWT 的新手,我正在将现有的 GWT 应用程序升级到 java 8 (jdk1.8.0_251) 和 tomcat 8(8.0.53),它在 windows 机器上运行良好,但是当我尝试在主机 linux 上部署时具有完全相同的 java 和 tomcat 配置的机器给出错误 com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException:响应无法反序列化
如果存在与 java 8 或 tomcat 8 的 GWT 版本不兼容问题,它不应该在 windows 中工作吗? 其他可能的原因是什么以及在哪里寻找? 我正在使用以下配置
-
GWT 版本 2.9.0
tomcat 版本 8.0.53
java 1.8.0.251
经过调查,我发现只有 Date 类型没有被反序列化。是否有针对 tomcat 8 的特定格式或日期相关设置?
【问题讨论】:
您好,欢迎来到 ***。您能否将您的 java 和 tomcat 配置添加到帖子中,以便社区可以提供更好的建议? 您使用的是哪个版本的 GWT? 我使用的是gwt 2.9.0版本 经过调查,我发现只有 Date 类型没有被反序列化。 tomcat 8 是否有任何特定的格式或日期相关设置? 【参考方案1】:我已经多次遇到此异常,它也取决于服务器配置/版本,但 Windows 和 Linux 之间并没有特别的区别。
要使其始终工作,请确保您的所有传输对象(客户端-服务器)都是可序列化。如果一个类满足以下三个要求,则它是可序列化的:
它实现 Java Serializable 或 GWT IsSerializable 接口,可以是直接的,也可以是因为它派生自超类 确实如此。 它的非最终、非瞬态实例字段本身就是 可序列化,并且 它有一个默认(零参数)构造函数,可以任意访问 修饰符(例如 private Foo() 将起作用)。我个人喜欢我所有的 DTO(数据传输对象)总是同时实现 com.google.gwt.user.client.rpc.IsSerializable 和 java.io.Serializable:
public class Contact implements IsSerializable, Serializable
还要检查您是否在 .gwt.xml 文件中指定了可翻译代码(您使用的 DTO)的路径,例如:
<source path='client' />
<source path='shared' />
<source path='server/my/special/package/pojos' />
默认情况下,前两个路径存在,但如果您想发送这些路径之外的特定包,则必须在此处指定。
【讨论】:
感谢您的回复经过调查,我发现只有 Date 类型没有被反序列化。 tomcat 8 是否有任何特定的格式或日期相关设置?以上是关于GWT 应用程序在 Windows 上运行,而不是在具有相同配置的 Linux 上运行的主要内容,如果未能解决你的问题,请参考以下文章