XmlObjectReader.javaЯдро десериализации фреймворка XmlStream — превращает XML (в виде dom4j Element дерева) обратно в Java-объекты. 514 строк. Это самый большой файл в XmlStream-фреймворке. Javadoc: "Parses objects serialized by the XmlObjectWriter. Uses the dom4j." Работает в паре с XmlObjectWriter.
Reader — это stateful объект (в отличие от stateless Writer):
processedElements (Set<Element>) — прочитанные XML-элементыprocessedAttributes (Map<Element, Set<String>>) — прочитанные атрибутыreferenceObjects (Map<String, Object>) — кэш по o-id для дедупликацииwarnings (String) — предупреждения о непрочитанных элементахread()read(String xml) — публичный APIПринимает сырую XML-строку. Парсит через XmlHelper.fromString(). Очищает состояние. После чтения запускает checkForIgnoredElements().
read(Element el) — внутренний APIПо имени тега находит класс (через getClass()), вызывает рекурсивный read(Class, Element, ...).
getClass(String)this.aliasMap.getClassForAlias(name)xmlRegistry.getClassForAlias(name)read(Class, Element, attrName, attrValue)Цепочка проверок типа: Reference check → Converter check → Enum check (с toUpperCase fallback) → Collection check → Complex object (через BeanHelper.newInstance()).
newInstance() — перехват создания объекта (может вернуть Status.IGNORE)addCollectionEntry() — перехват добавления в коллекциюsetField() — перехват присвоения поляinitialize(Class) — предварительное сканированиеРекурсивно обходит дерево типов для предварительной регистрации @XmlObject-классов в AliasMap. Использует processed Set для предотвращения бесконечной рекурсии.
868d6abb7 2025 → 2026 63081666f Source file headers: 2024→2025 a72903e36 StringBuffer → StringBuilder b6092df09 Copyright 2023 → 2024 ab45d51fa Copyright 2001-2022 → 2001-2023 73b0be50b commons.collections → commons.collections4 5f7ef41b8 Copyright 2021 → 2022 cd27dd997 package xstream → xmlstream 73a9755df Code cleanup (StringBuffer→StringBuilder, diamond) 32f634b88 Optimize imports 000ca723d Remove pointless boolean expressions a5bbdca6a Change logger to slf4j f979e8a42 MGC-UPDATE: Update auf Version 3.0.0-SNAPSHOT 9ebb88522 Initial commit
Ключевые изменения: миграция StringBuffer→StringBuilder, переход на commons-collections4, логирование SLF4J.