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 上运行的主要内容,如果未能解决你的问题,请参考以下文章

如何知道我的鼠标在GWT中悬停的是哪个组件? [JAVA]

如何在Intellij IDEA 2018.2中调试GWT 2.8.1作为java代码而不是java脚本

GWT添加jar而不是项目

在eclipse中的tomcat上运行GWT

GWT 菜单栏中的图像而不是文本

在 Windows 7 而不是 Windows XP 上运行 Visual Studio 2010 的优势