EN · DE · RU · FR · ES

#754: XmlObject.java

Строк: 44 · Автор: Kai Reinhard · Тип: Java annotation · Retention: RUNTIME · Target: TYPE

Что это

Аннотация уровня класса — маркер того что класс может быть сериализован/десериализован фреймворком XmlStream. 44 строки. Это аналог JAXB's @XmlRootElement и XStream's неявного соглашения. В отличие от них, XmlStream требует явной аннотации — класс без @XmlObject не будет обработан ни XmlObjectReader ни XmlObjectWriter. Это сделано для безопасности: только явно разрешённые классы участвуют в сериализации.

Единственный параметр — alias()

Переопределяет имя корневого XML-элемента. По умолчанию (пустая строка) используется полное квалифицированное имя класса. С алиасом: @XmlObject(alias="user")<user>. Алиасы регистрируются в AliasMap (#758).

Разница с @XmlField(alias): @XmlObject.alias задаёт имя корневого элемента, а @XmlField.alias — имя дочернего элемента или атрибута.

Как используется в рантайме

  1. XmlRegistry при старте приложения сканирует classpath и находит все классы с @XmlObject
  2. Для каждого регистрирует в AliasMap: Class → alias и alias → Class
  3. XmlObjectReader.newInstance() при встрече XML-элемента ищет класс через AliasMap.getClassForAlias(tagName)
  4. Если класс найден — создаёт экземпляр через BeanHelper.newInstance()
  5. Если не найден — возвращает Status.IGNORE (#760)

XmlObject vs XStream @XStreamAlias

Ключевое отличие: @XmlObject — это не просто алиас, это явное разрешение на сериализацию. Класс без @XmlObject вообще не участвует в процессе. XStream по умолчанию сериализует любой класс — риск утечки данных.

Git History

868d6abb7 2025 → 2026
63081666f Source file headers: 2024→2025
b6092df09 Copyright 2023 → 2024
ab45d51fa Copyright 2001-2022 → 2001-2023
5f7ef41b8 Copyright 2021 → 2022
cd27dd997 package xstream → xmlstream
ceb63e8a1 Source code header: (C) 2001-2021
7c79f1922 Copyright of source header → 2020
32f634b88 Optimize imports
dd5ca38ac CopyRight of all java file-header updated or created
9ebb88522 Initial commit

Аннотация с одним атрибутом (alias) не менялась с момента создания. Это ворота разрешения, а не поверхность конфигурации.