有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从Intellij IDEA内部运行Tomcat时的java差异?

在Tomcat(6.0.32)中运行的Spring 3.5 Webflow 2.2应用程序有一个非常奇怪的问题

webflow调用的一部分,用于检索对象列表。此列表放置在viewScope对象中,供JSP视图使用。此列表中的每个对象都继承自包含一些公共字段的基类

然后,webflow通过写出所有对象,转发到一个显示该列表内容的JSP视图

当我从一个独立的Tomcat运行这个时,基类上的字段都以某种方式设置为null。我已经调试并确认列表是根据webflow调用的代码正确构建的。因此,在将列表放入webflow视图范围,然后JSP检索它之间的某个地方,基类字段被重置为null

问题的真正奇怪之处在于,如果我从Intellij IDEA内部启动并运行Tomcat,应用程序运行得非常完美。我尝试过各种JDK和Tomcat版本,但都有相同的问题

这似乎是一个webflow问题(可能是不正确的序列化?)这取决于Tomcat是否是从IntelliJ内部启动的

IntelliJ在做什么可能导致Java序列化行为不当


共 (1) 个答案

  1. # 1 楼答案

    嗯,我还没有找到确切的根本原因,但我确实有一个解决办法。我只是在神秘地没有正确序列化的对象上实现了自定义对象序列化方法——private void writeObject()和readObject(),然后一切都开始工作。基类中只有几个简单的类型(几个long和一个String),所以并不复杂

    为了澄清(以防有人感兴趣),我在我的web应用程序中有一个表单使用的数据对象。此对象包含属性对象的映射,其中每个属性对象基于类层次结构,如下所示:

    属性类->;共享基类->;根基类

    Spring web流将所有这些数据持久化到字节数组中,然后在web流调用视图时取消持久化。在我的例子中,根基类的字段没有被默认机制持久化

    但我仍然不知道确切的原因。我仍然不知道为什么,当我从IntelliJ内部启动Tomcat时,序列化工作如期进行。很奇怪


    更新:找到了罪犯。一个非常糟糕的Ant构建脚本隐藏了一个丢失的“可序列化”接口标记

    所讨论的系统实际上相当大,并且有一个讨厌的、难以遵循的Ant构建脚本。我以为它是在做一个完整的、正确的、干净的构建。在我上面展示的类层次结构中,属性类和根基类位于不同的JAR中。而包含根基类的jar实际上正在被缓存,并且没有正确地重建

    正在部署的基类的旧版本(不正确)没有“可序列化”标记接口(属性类有)。当然,它的字段没有被序列化。当我从IntelliJ内部进行测试时,它直接从我的源代码进行构建和部署

    我现在觉得自己很笨