XmlOmitField.javaМаркерная аннотация — помечает поле Java-класса как не подлежащее XML-сериализации. 39 строк, из которых 21 — GPL-лицензия, 15 — импорты/объявление, и только 3 строки самого кода. Это полный аналог transient из Java Serialization API и @XmlTransient из JAXB, но для фреймворка XmlStream. Без параметров — чисто маркер. Проверяется в XmlObjectWriter.writeField() (строка 242): if (field.isAnnotationPresent(XmlOmitField.class)) continue; и в XmlObjectReader.read() (строка 471).
transient?Java ключевое слово transient исключает поле из всех видов сериализации — и Java Serialization, и XStream, и XmlStream. Но иногда нужно чтобы поле участвовало в Java-сериализации (например, для кэширования в HTTP-сессии) но НЕ попадало в XML-экспорт. @XmlOmitField даёт гранулярный контроль: поле может быть НЕ-transient (участвует в Java-сериализации) но всё равно исключено из XML.
Пример: поле password в PFUserDO. Оно должно быть transient (не сериализоваться в сессию), но даже если бы не было — @XmlOmitField гарантирует что пароль никогда не попадёт в XML-экспорт данных. Двойная защита.
@XmlOmitField пропускает поле всегда, независимо от значения. Механизм default-value из @XmlField пропускает поле только если его значение равно значению по умолчанию. Это разные сценарии:
@XmlOmitField — "это поле никогда не должно быть в XML" (пароли, временные данные, вычисляемые поля)@XmlField(defaultIntValue=0) — "это поле не нужно в XML если оно равно 0" (оптимизация размера)Git log содержит только обновления копирайта и одно переименование пакета. Файл практически не менялся с момента создания — что ожидаемо для аннотации-маркера без параметров. Единственное значимое изменение: cd27dd997 — "package xstream -> xmlstream" (пакет был переименован чтобы избежать путаницы с библиотекой XStream).