Status.javaIGNORE. 32 líneas, de las cuales 21 son el encabezado de licencia GPLv3. Uno de los archivos más cortos e inusuales del proyecto. El Javadoc en IGNORE explica: "Usado por XmlObjectReader.newInstance(Class, org.dom4j.Element, String)" — es utilizado por el método newInstance() de XmlObjectReader durante la lectura de XML.
Este es el Patrón Centinela — un valor especial que señala la necesidad de omitir un elemento durante la lectura. Cuando XmlObjectReader.newInstance() encuentra un elemento XML para el cual no hay una clase registrada (por ejemplo, una etiqueta de una versión antigua del formato que fue eliminada en una versión más reciente), devuelve Status.IGNORE en lugar de fallar con un error.
¿Por qué no simplemente devolver null? Porque null es ambiguo: podría significar "omitir" O "ocurrió un error" O "el elemento está vacío". Status.IGNORE es una señal explícita y nombrada: "Reconozco este elemento como ignorable, lo omito conscientemente, continúo procesando".
El enum permite semánticas limpias de valor de retorno de tres estados:
Object resultado = newInstance(clazz, element, version);
if (resultado == Status.IGNORE) {
// Elemento desconocido, omitirlo
} else if (resultado == null) {
// Reconocido pero tiene valor nulo (campo vacío)
} else {
// Objeto deserializado normal
}
Esto es significativamente más limpio que devolver null con semántica ambigua. El patrón es común en analizadores y deserializadores — por ejemplo, Rust usa Option<T>, Haskell usa Maybe, y aquí — un enum de un solo elemento.
Método XmlObjectReader.newInstance(Class<?> clazz, Element rootElement, String version) — un método de fábrica protegido que las subclases pueden sobrescribir. En cada nivel, verifica AliasMap: si la etiqueta está registrada, crea un objeto; si no está registrada — devuelve Status.IGNORE, y el código llamante omite ese elemento. Esto permite que los archivos XML contengan etiquetas "extra" (por ejemplo, de una versión más reciente del formato cuando son leídos por una versión anterior) sin errores — un mecanismo de compatibilidad hacia atrás.
Un enum con un valor es simultáneamente un tipo y un valor. Si newInstance() devolviera solo Object (donde null = omitir), el código llamante necesitaría if (resultado == null). Pero null también podría ser un resultado legítimo (un campo genuinamente vacío). Usar un tipo separado Status permite al código llamante distinguir precisamente entre "omitir esto" (IGNORE) y "el valor está ausente" (null).
| Mecanismo | Ámbito | Cuándo se activa |
|---|---|---|
Status.IGNORE | En tiempo de ejecución — por elemento, durante la lectura | La etiqueta XML no tiene una clase Java correspondiente registrada |
@XmlOmitField (#757) | En tiempo de compilación — en la declaración del campo | Siempre — el campo nunca se serializa/deserializa |
| Omitir por valor por defecto | En tiempo de compilación — en @XmlField | El campo es igual al valor por defecto declarado |
868d6abb7 2025 → 2026 (actualización de año de copyright) 63081666f Encabezados de archivos fuente: 2024→2025 b6092df09 Copyright 2023 → 2024 ab45d51fa Copyright 2001-2022 → 2001-2023 5f7ef41b8 Copyright 2021 → 2022 cd27dd997 paquete xstream → xmlstream ceb63e8a1 Encabezado de código fuente: (C) 2001-2021 7c79f1922 Copyright del encabezado fuente → 2020 dd5ca38ac CopyRight de todos los encabezados de archivos java actualizado o creado 9ebb88522 Commit inicial
IGNORE) y nunca ha cambiado desde el commit inicial más allá de los encabezados de copyright y el cambio de nombre del paquete. Un enum de un solo valor con un propósito centinela claro es un diseño "terminado" — no hay nada que añadir o modificar. Este es uno de los archivos más estables de toda la base de código de ProjectForge.