Ну, я не нашел точную причину, но у меня есть обходной путь.Я просто реализовал пользовательские методы сериализации объектов - private void writeObject () и readObject () - на объектах, которые таинственным образом не сериализовались должным образом, и все начало работать.В базовом классе есть только пара простых типов (пара long и String), так что в этом нет ничего сложного.
Просто для пояснения (на случай, если кто-либо заинтересован) - у меня был объект данныхс помощью формы в моем веб-приложении.Этот объект содержит карту объектов атрибутов, где каждый объект атрибута основан на иерархии классов примерно так:
Класс атрибута -> общий базовый класс -> корневой базовый класс
Все эти данныесохраняется в байтовый массив веб-потоком Spring, а затем не сохраняется, когда веб-поток вызывает представление.В моем случае поля корневого базового класса не сохранялись с помощью механизма по умолчанию.
Я все еще точно не знаю, почему.И я до сих пор не знаю, почему, когда я запустил Tomcat из IntelliJ, сериализация работала, как и ожидалось.Очень странно.
ОБНОВЛЕНИЕ: Нашли виновника.Действительно плохой скрипт сборки Ant, скрывающий отсутствующий «сериализуемый» маркер интерфейса.
Данная система на самом деле довольно большая и имеет неприятный, трудный для понимания скрипт сборки Ant.Я предполагал, что это делает полную, правильную чистую сборку.В иерархии классов, которую я показал выше, класс Attribute и Root Base Class находились в разных банках.А банка, содержащая корневой базовый класс, фактически кэшировалась и не перестраивалась должным образом.
В более старой (неправильной) версии развертываемого базового класса не было «сериализуемого» интерфейса маркера (класс Attribute имел).Поэтому, конечно, его поля не были сериализованы.Когда я тестировал из IntelliJ, он делал сборку и развертывание прямо из моих источников.
Я чувствую себя действительно глупым.