Status.javaПеречисление (enum) с одним единственным значением: IGNORE. 32 строки, из которых 21 — лицензия GPLv3. Один из самых коротких и необычных файлов в проекте. Javadoc на значении IGNORE: "Used by XmlObjectReader.newInstance(Class, org.dom4j.Element, String)" — используется методом newInstance() класса XmlObjectReader.
Это паттерн Sentinel (страж) — специальное значение, которое сигнализирует о необходимости пропустить элемент при чтении. Когда XmlObjectReader.newInstance() встречает XML-элемент, для которого нет зарегистрированного класса, он возвращает Status.IGNORE вместо ошибки.
Почему просто не вернуть null? Потому что null неоднозначен: он может означать "пропустить" ИЛИ "произошла ошибка" ИЛИ "элемент пустой". Status.IGNORE — это явный, именованный сигнал.
Object result = reader.newInstance(clazz, element, version);
if (result == Status.IGNORE) {
// элемент нераспознан, пропускаем
} else if (result == null) {
// распознан, но значение null (поле пустое)
} else {
// нормальный объект
}
Это значительно чище, чем возвращать null с неоднозначной семантикой.
Метод XmlObjectReader.newInstance() — фабричный метод, который подклассы могут переопределить. На каждом уровне проверяет AliasMap: если тег зарегистрирован, создаёт объект; если не зарегистрирован — возвращает Status.IGNORE. Это позволяет XML-файлам содержать "лишние" теги без ошибок — механизм обратной совместимости.
| Механизм | Область | Когда срабатывает |
|---|---|---|
Status.IGNORE | Runtime — поэлементно, при чтении | XML-тег без зарегистрированного Java-класса |
@XmlOmitField (#757) | Compile-time — на объявлении поля | Всегда — поле не сериализуется/десериализуется |
| Default-value skipping | Compile-time — в @XmlField | Значение поля равно default |
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 dd5ca38ac CopyRight of all java file-header updated or created 9ebb88522 Initial commit
Enum с одним значением (IGNORE) никогда не менялся. Одноэлементный enum с чёткой sentinel-целью — это "завершённый" дизайн, не требующий модификаций. Один из самых стабильных файлов во всей кодовой базе ProjectForge.