EN · DE · RU · FR · ES

#756: XmlObjectWriter.java

Строк: 387 · Автор: Kai Reinhard · Тип: Java — движок сериализации XmlStream · Библиотека: dom4j

Что это

Движок сериализации фреймворка XmlStream — превращает Java-объекты в XML (dom4j Document). 387 строк. Javadoc: "A simple solution for streaming xml objects and to prevent default values from the xml output (because this feature isn't yet available in XStream)." — XStream на момент написания не умел пропускать поля со значениями по умолчанию, а для экспорта данных это критично.

Пара с XmlObjectReader: Writer сериализует Java → XML, Reader десериализует XML → Java.

Две константы — deduplication через XML-атрибуты

Этот механизм решает проблему циклических ссылок и дублирования.

Кэш записанных объектов — writtenObjects

Map<String, Element> где ключ — className:hashCode. Это identity-based кэш (по хэш-коду), а не equals-based — два разных объекта с одинаковыми полями будут записаны оба, но один объект, встреченный дважды — только один раз.

Основной метод — write(Branch parent, Object obj, ...)

Рекурсивный метод сериализации. Цепочка проверок: определение имени тега → deduplication check → Converter → Enum → Collection → Complex object.

Default-value skipping — ключевая фича

Метод isDefaultType(ann, value) проверяет: равно ли значение поля значению по умолчанию из аннотации @XmlField.default*? Если да — поле не записывается. Это то, ради чего создавался XmlStream:

Git History

868d6abb7 2025 → 2026
63081666f Source file headers: 2024→2025
9f874e26c MAJOR-CHANGE! Migration Integer → Long id's
b6092df09 Copyright 2023 → 2024
ab45d51fa Copyright 2001-2022 → 2001-2023
5f7ef41b8 Copyright 2021 → 2022
cd27dd997 package xstream → xmlstream
24019a0f5 Eliminate DateHolder occurences
73a9755df Code cleanup (StringBuffer→StringBuilder, diamond)
32f634b88 Optimize imports
a5bbdca6a Change logger to slf4j
f979e8a42 MGC-UPDATE: Update auf Version 3.0.0-SNAPSHOT
9ebb88522 Initial commit

Ключевые изменения: 9f874e26c — массовая миграция идентификаторов с Integer на Long. 24019a0f5 — удаление DateHolder. cd27dd997 — пакет переименован с xstream на xmlstream; комментарий "(should be replaced by xstream later)" — автор планировал заменить на XStream, но этого не произошло.